home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 January: Technology Seed / Jan. '98 ATS.toast / QuickTime™ 3.0b11 / QTPublicInterfaces / AIncludes / QuickTimeMusic.a < prev   
Encoding:
Text File  |  1998-01-12  |  91.1 KB  |  2,754 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        QuickTimeMusic.a
  3. ;
  4. ;    Contains:    QuickTime interfaces
  5. ;
  6. ;    Version:    Technology:    
  7. ;                Release:    QuickTime 3.0 Beta
  8. ;
  9. ;    Copyright:    © 1990-1997 by Apple Computer, Inc., all rights reserved
  10. ;
  11. ;    Bugs?:        Please include the the file and version information (from above) with
  12. ;                the problem description.  Developers belonging to one of the Apple
  13. ;                developer programs can submit bug reports to:
  14. ;
  15. ;                    devsupport@apple.com
  16. ;
  17. ;
  18.     IF &TYPE('__QUICKTIMEMUSIC__') = 'UNDEFINED' THEN
  19. __QUICKTIMEMUSIC__ SET 1
  20.  
  21.     IF &TYPE('__COMPONENTS__') = 'UNDEFINED' THEN
  22.     include 'Components.a'
  23.     ENDIF
  24.     IF &TYPE('__IMAGECOMPRESSION__') = 'UNDEFINED' THEN
  25.     include 'ImageCompression.a'
  26.     ENDIF
  27.     IF &TYPE('__MOVIES__') = 'UNDEFINED' THEN
  28.     include 'Movies.a'
  29.     ENDIF
  30.     IF &TYPE('__QUICKDRAW__') = 'UNDEFINED' THEN
  31.     include 'Quickdraw.a'
  32.     ENDIF
  33.     IF &TYPE('__VIDEO__') = 'UNDEFINED' THEN
  34.     include 'Video.a'
  35.     ENDIF
  36.     IF &TYPE('__MACMEMORY__') = 'UNDEFINED' THEN
  37.     include 'MacMemory.a'
  38.     ENDIF
  39.     IF &TYPE('__SOUND__') = 'UNDEFINED' THEN
  40.     include 'Sound.a'
  41.     ENDIF
  42.  
  43.  
  44. kaiToneDescType                    EQU        'tone'
  45. kaiNoteRequestInfoType            EQU        'ntrq'
  46. kaiKnobListType                    EQU        'knbl'
  47. kaiKeyRangeInfoType                EQU        'sinf'
  48. kaiSampleDescType                EQU        'sdsc'
  49. kaiSampleInfoType                EQU        'smin'
  50. kaiSampleDataType                EQU        'sdat'
  51. kaiSampleDataQUIDType            EQU        'quid'
  52. kaiInstInfoType                    EQU        'iinf'
  53. kaiPictType                        EQU        'pict'
  54. kaiWriterType                    EQU        '©wrt'
  55. kaiCopyrightType                EQU        '©cpy'
  56. kaiOtherStrType                    EQU        'str '
  57. kaiInstrumentRefType            EQU        'iref'
  58. kaiInstGMQualityType            EQU        'qual'
  59. kaiLibraryInfoType                EQU        'linf'
  60. kaiLibraryDescType                EQU        'ldsc'
  61. InstLibDescRec            RECORD 0
  62. libIDName                 ds        Str31            ; offset: $0 (0)
  63. sizeof                     EQU *                    ; size:   $20 (32)
  64.                         ENDR
  65. InstKnobRec                RECORD 0
  66. number                     ds        BigEndianLong    ; offset: $0 (0)
  67. value                     ds        BigEndianLong    ; offset: $4 (4)
  68. sizeof                     EQU *                    ; size:   $8 (8)
  69.                         ENDR
  70.  
  71. kInstKnobMissingUnknown            EQU        0
  72. kInstKnobMissingDefault            EQU        $01
  73. InstKnobList            RECORD 0
  74. knobCount                 ds        BigEndianLong    ; offset: $0 (0)
  75. knobFlags                 ds        BigEndianLong    ; offset: $4 (4)
  76. knob                     ds        InstKnobRec        ; offset: $8 (8) <-- really an array of length one
  77. sizeof                     EQU *                    ; size:   $10 (16)
  78.                         ENDR
  79.  
  80. kMusicLoopTypeNormal            EQU        0
  81. kMusicLoopTypePalindrome        EQU        1                    ; back & forth
  82.  
  83. instSamplePreProcessFlag        EQU        $01
  84. InstSampleDescRec        RECORD 0
  85. dataFormat                 ds        BigEndianOSType ; offset: $0 (0)
  86. numChannels                 ds        BigEndianShort ; offset: $4 (4)
  87. sampleSize                 ds        BigEndianShort ; offset: $6 (6)
  88. sampleRate                 ds        BigEndianUnsignedFixed ; offset: $8 (8)
  89. sampleDataID             ds        BigEndianShort ; offset: $C (12)
  90. offset                     ds        BigEndianLong    ; offset: $E (14)        ;  offset within SampleData - this could be just for internal use
  91. numSamples                 ds        BigEndianLong    ; offset: $12 (18)        ;  this could also just be for internal use, we'll see
  92. loopType                 ds        BigEndianLong    ; offset: $16 (22)
  93. loopStart                 ds        BigEndianLong    ; offset: $1A (26)
  94. loopEnd                     ds        BigEndianLong    ; offset: $1E (30)
  95. pitchNormal                 ds        BigEndianLong    ; offset: $22 (34)
  96. pitchLow                 ds        BigEndianLong    ; offset: $26 (38)
  97. pitchHigh                 ds        BigEndianLong    ; offset: $2A (42)
  98. sizeof                     EQU *                    ; size:   $2E (46)
  99.                         ENDR
  100. ; typedef Handle                         AtomicInstrument
  101.  
  102. ; typedef Ptr                             AtomicInstrumentPtr
  103.  
  104.  
  105. kQTMIDIComponentType            EQU        'midi'
  106.  
  107. kOMSComponentSubType            EQU        'OMS '
  108. kFMSComponentSubType            EQU        'FMS '
  109. kMIDIManagerComponentSubType    EQU        'mmgr'
  110. ; typedef ComponentInstance             QTMIDIComponent
  111.  
  112.  
  113. kMusicPacketPortLost            EQU        1                    ; received when application loses the default input port 
  114. kMusicPacketPortFound            EQU        2                    ; received when application gets it back out from under someone else's claim 
  115. kMusicPacketTimeGap                EQU        3                    ; data[0] = number of milliseconds to keep the MIDI line silent 
  116.  
  117. kAppleSysexID                    EQU        $11                    ; apple sysex is followed by 2-byte command. 0001 is the command for samplesize 
  118. kAppleSysexCmdSampleSize        EQU        $0001                ; 21 bit number in 3 midi bytes follows sysex ID and 2 cmd bytes 
  119. kAppleSysexCmdSampleBreak        EQU        $0002                ; specifies that the sample should break right here 
  120. kAppleSysexCmdAtomicInstrument    EQU        $0010                ; contents of atomic instrument handle 
  121. kAppleSysexCmdDeveloper            EQU        $7F00                ; F0 11 7F 00 ww xx yy zz ... F7 is available for non-Apple developers, where wxyz is unique app signature with 8th bit cleared, unique to developer, and 00 and 7f are reserved 
  122. MusicMIDIPacket            RECORD 0
  123. length                     ds.w    1                ; offset: $0 (0)
  124. reserved                 ds.l    1                ; offset: $2 (2)        ;  if length zero, then reserved = above enum 
  125. data                     ds.b    249                ; offset: $6 (6)
  126.                          ORG 256
  127. sizeof                     EQU *                    ; size:   $100 (256)
  128.                         ENDR
  129.  
  130. kSynthesizerConnectionFMS        EQU        1                    ; this connection imported from FMS 
  131. kSynthesizerConnectionMMgr        EQU        2                    ; this connection imported from the MIDI Mgr 
  132. kSynthesizerConnectionOMS        EQU        4                    ; this connection imported from OMS 
  133. kSynthesizerConnectionQT        EQU        8                    ; this connection is a QuickTime-only port 
  134.                                                             ; lowest four bits are mutually exclusive; combinations reserved for future use.
  135. kSynthesizerConnectionUnavailable EQU    256                    ; port exists, but cannot be used just now 
  136. SynthesizerConnections    RECORD 0
  137. clientID                 ds.l    1                ; offset: $0 (0)
  138. inputPortID                 ds.l    1                ; offset: $4 (4)        ;  terminology death: this port is used to SEND to the midi synth 
  139. outputPortID             ds.l    1                ; offset: $8 (8)        ;  terminology death: this port receives from a keyboard or other control device 
  140. midiChannel                 ds.l    1                ; offset: $C (12)        ;  The system channel; others are configurable (or the nubus slot number) 
  141. flags                     ds.l    1                ; offset: $10 (16)
  142. unique                     ds.l    1                ; offset: $14 (20)        ;  unique id may be used instead of index, to getinfo and unregister calls 
  143. reserved1                 ds.l    1                ; offset: $18 (24)        ;  should be zero 
  144. reserved2                 ds.l    1                ; offset: $1C (28)        ;  should be zero 
  145. sizeof                     EQU *                    ; size:   $20 (32)
  146.                         ENDR
  147. QTMIDIPort                RECORD 0
  148. portConnections             ds        SynthesizerConnections ; offset: $0 (0)
  149. portName                 ds        Str63            ; offset: $20 (32)
  150. sizeof                     EQU *                    ; size:   $60 (96)
  151.                         ENDR
  152. QTMIDIPortList            RECORD 0
  153. portCount                 ds.w    1                ; offset: $0 (0)
  154. port                     ds        QTMIDIPort        ; offset: $2 (2) <-- really an array of length one
  155. sizeof                     EQU *                    ; size:   $62 (98)
  156.                         ENDR
  157. ; typedef struct QTMIDIPortList *        QTMIDIPortListPtr
  158.  
  159. ; typedef QTMIDIPortListPtr *            QTMIDIPortListHandle
  160.  
  161. ;
  162. ; pascal ComponentResult QTMIDIGetMIDIPorts(QTMIDIComponent ci, QTMIDIPortListHandle *inputPorts, QTMIDIPortListHandle *outputPorts)
  163. ;
  164.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  165.         Macro
  166.         _QTMIDIGetMIDIPorts
  167.             move.l              #$00080001,-(sp)
  168.             moveq               #0,D0
  169.             dc.w                $A82A
  170.         EndM
  171.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  172.         IMPORT_CFM_FUNCTION QTMIDIGetMIDIPorts
  173.     ENDIF
  174.  
  175. ;
  176. ; pascal ComponentResult QTMIDIUseSendPort(QTMIDIComponent ci, long portIndex, long inUse)
  177. ;
  178.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  179.         Macro
  180.         _QTMIDIUseSendPort
  181.             move.l              #$00080002,-(sp)
  182.             moveq               #0,D0
  183.             dc.w                $A82A
  184.         EndM
  185.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  186.         IMPORT_CFM_FUNCTION QTMIDIUseSendPort
  187.     ENDIF
  188.  
  189. ;
  190. ; pascal ComponentResult QTMIDISendMIDI(QTMIDIComponent ci, long portIndex, MusicMIDIPacket *mp)
  191. ;
  192.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  193.         Macro
  194.         _QTMIDISendMIDI
  195.             move.l              #$00080003,-(sp)
  196.             moveq               #0,D0
  197.             dc.w                $A82A
  198.         EndM
  199.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  200.         IMPORT_CFM_FUNCTION QTMIDISendMIDI
  201.     ENDIF
  202.  
  203. ;
  204. ; pascal ComponentResult QTMIDIUseReceivePort(QTMIDIComponent ci, long portIndex, MusicMIDIReadHookUPP readHook, long refCon)
  205. ;
  206.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  207.         Macro
  208.         _QTMIDIUseReceivePort
  209.             move.l              #$000C0004,-(sp)
  210.             moveq               #0,D0
  211.             dc.w                $A82A
  212.         EndM
  213.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  214.         IMPORT_CFM_FUNCTION QTMIDIUseReceivePort
  215.     ENDIF
  216.  
  217.  
  218.  
  219.  
  220. kMusicComponentType                EQU        'musi'
  221. kInstrumentComponentType        EQU        'inst'
  222.  
  223. kSoftSynthComponentSubType        EQU        'ss  '
  224. kGMSynthComponentSubType        EQU        'gm  '
  225.  
  226. ; typedef ComponentInstance             MusicComponent
  227.  
  228. ;  MusicSynthesizerFlags
  229.  
  230. kSynthesizerDynamicVoice        EQU        $01                    ; can assign voices on the fly (else, polyphony is very important 
  231. kSynthesizerUsesMIDIPort        EQU        $02                    ; must be patched through MIDI Manager 
  232. kSynthesizerMicrotone            EQU        $04                    ; can play microtonal scales 
  233. kSynthesizerHasSamples            EQU        $08                    ; synthesizer has some use for sampled data 
  234. kSynthesizerMixedDrums            EQU        $10                    ; any part can play drum parts, total = instrument parts 
  235. kSynthesizerSoftware            EQU        $20                    ; implemented in main CPU software == uses cpu cycles 
  236. kSynthesizerHardware            EQU        $40                    ; is a hardware device (such as nubus, or maybe DSP?) 
  237. kSynthesizerDynamicChannel        EQU        $80                    ; can move any part to any channel or disable each part. (else we assume it lives on all channels in masks) 
  238. kSynthesizerHogsSystemChannel    EQU        $0100                ; can be channelwise dynamic, but always responds on its system channel 
  239. kSynthesizerHasSystemChannel    EQU        $0200                ; has some "system channel" notion to distinguish it from multiple instances of the same device (GM devices dont) 
  240. kSynthesizerSlowSetPart            EQU        $0400                ; SetPart() and SetPartInstrumentNumber() calls do not have rapid response, may glitch notes 
  241. kSynthesizerOffline                EQU        $1000                ; can enter an offline synthesis mode 
  242. kSynthesizerGM                    EQU        $4000                ; synth is a GM device 
  243. kSynthesizerDLS                    EQU        $8000                ; synth supports DLS level 1 
  244. kSynthesizerSoundLocalization    EQU        $00010000            ; synth supports extremely baroque, nonstandard, and proprietary "apple game sprockets" localization parameter set 
  245. ; * Note that these controller numbers
  246. ; * are _not_ identical to the MIDI controller numbers.
  247. ; * These are _signed_ 8.8 values, and the LSB's are
  248. ; * always sent to a MIDI device. Controllers 32-63 are
  249. ; * reserved (for MIDI, they are LSB's for 0-31, but we
  250. ; * always send both).
  251. ; *
  252. ; * The full range, therefore, is -128.00 to 127.7f.
  253. ; *
  254. ; * _Excepting_ _volume_, all controls default to zero.
  255. ; *
  256. ; * Pitch bend is specified in fractional semitones! No
  257. ; * more "pitch bend range" nonsense. You can bend as far
  258. ; * as you want, any time you want.
  259.  
  260. ; typedef SInt32                         MusicController
  261.  
  262.  
  263. kControllerModulationWheel        EQU        1
  264. kControllerBreath                EQU        2
  265. kControllerFoot                    EQU        4
  266. kControllerPortamentoTime        EQU        5                    ; time in 8.8 seconds, portamento on/off is omitted, 0 time = 'off' 
  267. kControllerVolume                EQU        7
  268. kControllerBalance                EQU        8
  269. kControllerPan                    EQU        10                    ; 0 - "default", 1 - n: positioned in output 1-n (incl fractions) 
  270. kControllerExpression            EQU        11
  271. kControllerLever1                EQU        16                    ; general purpose controllers 
  272. kControllerLever2                EQU        17                    ; general purpose controllers 
  273. kControllerLever3                EQU        18                    ; general purpose controllers 
  274. kControllerLever4                EQU        19                    ; general purpose controllers 
  275. kControllerLever5                EQU        80                    ; general purpose controllers 
  276. kControllerLever6                EQU        81                    ; general purpose controllers 
  277. kControllerLever7                EQU        82                    ; general purpose controllers 
  278. kControllerLever8                EQU        83                    ; general purpose controllers 
  279. kControllerPitchBend            EQU        32                    ; positive & negative semitones, with 7 bits fraction 
  280. kControllerAfterTouch            EQU        33                    ; aka channel pressure 
  281. kControllerSustain                EQU        64                    ; boolean - positive for on, 0 or negative off 
  282. kControllerSostenuto            EQU        66                    ; boolean 
  283. kControllerSoftPedal            EQU        67                    ; boolean 
  284. kControllerReverb                EQU        91
  285. kControllerTremolo                EQU        92
  286. kControllerChorus                EQU        93
  287. kControllerCeleste                EQU        94
  288. kControllerPhaser                EQU        95
  289. kControllerEditPart                EQU        113                    ; last 16 controllers 113-128 and above are global controllers which respond on part zero 
  290. kControllerMasterTune            EQU        114
  291.  
  292. ;  ID's of knobs supported by the QuickTime Music Synthesizer built into QuickTime
  293.  
  294.  
  295. kQTMSKnobStartID                EQU        $02000000
  296. kQTMSKnobVolumeAttackTimeID        EQU        $02000001            ; sample can override
  297. kQTMSKnobVolumeDecayTimeID        EQU        $02000002            ; sample can override
  298. kQTMSKnobVolumeSustainLevelID    EQU        $02000003            ; sample can override
  299. kQTMSKnobVolumeRelease1RateID    EQU        $02000004            ;•••• OBSOLETE ME!
  300. kQTMSKnobVolumeReleaseKeyScalingID EQU    $02000005
  301. kQTMSKnobVolumeReleaseTimeID    EQU        $02000006            ; sample can override
  302. kQTMSKnobVolumeLFODelayID        EQU        $02000007
  303. kQTMSKnobVolumeLFORampTimeID    EQU        $02000008
  304. kQTMSKnobVolumeLFOPeriodID        EQU        $02000009
  305. kQTMSKnobVolumeLFOShapeID        EQU        $0200000A
  306. kQTMSKnobVolumeLFODepthID        EQU        $0200000B
  307. kQTMSKnobVolumeOverallID        EQU        $0200000C
  308. kQTMSKnobVolumeVelocity127ID    EQU        $0200000D
  309. kQTMSKnobVolumeVelocity96ID        EQU        $0200000E
  310. kQTMSKnobVolumeVelocity64ID        EQU        $0200000F
  311. kQTMSKnobVolumeVelocity32ID        EQU        $02000010
  312. kQTMSKnobVolumeVelocity16ID        EQU        $02000011            ; Pitch related knobs
  313. kQTMSKnobPitchTransposeID        EQU        $02000012            ; sample can override
  314. kQTMSKnobPitchLFODelayID        EQU        $02000013
  315. kQTMSKnobPitchLFORampTimeID        EQU        $02000014
  316. kQTMSKnobPitchLFOPeriodID        EQU        $02000015
  317. kQTMSKnobPitchLFOShapeID        EQU        $02000016
  318. kQTMSKnobPitchLFODepthID        EQU        $02000017
  319. kQTMSKnobPitchLFOQuantizeID        EQU        $02000018            ; Stereo related knobs
  320. kQTMSKnobStereoDefaultPanID        EQU        $02000019
  321. kQTMSKnobStereoPositionKeyScalingID EQU    $0200001A
  322. kQTMSKnobPitchLFOOffsetID        EQU        $0200001B
  323. kQTMSKnobExclusionGroupID        EQU        $0200001C            ; Misc knobs, late additions
  324. kQTMSKnobSustainTimeID            EQU        $0200001D
  325. kQTMSKnobSustainInfiniteID        EQU        $0200001E
  326. kQTMSKnobVolumeLFOStereoID        EQU        $0200001F
  327. kQTMSKnobVelocityLowID            EQU        $02000020
  328. kQTMSKnobVelocityHighID            EQU        $02000021
  329. kQTMSKnobVelocitySensitivityID    EQU        $02000022
  330. kQTMSKnobPitchSensitivityID        EQU        $02000023
  331. kQTMSKnobVolumeLFODepthFromWheelID EQU    $02000024
  332. kQTMSKnobPitchLFODepthFromWheelID EQU    $02000025            ; Volume Env again
  333. kQTMSKnobVolumeExpOptionsID        EQU        $02000026            ; Env1
  334. kQTMSKnobEnv1AttackTimeID        EQU        $02000027
  335. kQTMSKnobEnv1DecayTimeID        EQU        $02000028
  336. kQTMSKnobEnv1SustainLevelID        EQU        $02000029
  337. kQTMSKnobEnv1SustainTimeID        EQU        $0200002A
  338. kQTMSKnobEnv1SustainInfiniteID    EQU        $0200002B
  339. kQTMSKnobEnv1ReleaseTimeID        EQU        $0200002C
  340. kQTMSKnobEnv1ExpOptionsID        EQU        $0200002D            ; Env2
  341. kQTMSKnobEnv2AttackTimeID        EQU        $0200002E
  342. kQTMSKnobEnv2DecayTimeID        EQU        $0200002F
  343. kQTMSKnobEnv2SustainLevelID        EQU        $02000030
  344. kQTMSKnobEnv2SustainTimeID        EQU        $02000031
  345. kQTMSKnobEnv2SustainInfiniteID    EQU        $02000032
  346. kQTMSKnobEnv2ReleaseTimeID        EQU        $02000033
  347. kQTMSKnobEnv2ExpOptionsID        EQU        $02000034            ; Pitch Env
  348. kQTMSKnobPitchEnvelopeID        EQU        $02000035
  349. kQTMSKnobPitchEnvelopeDepthID    EQU        $02000036            ; Filter
  350. kQTMSKnobFilterKeyFollowID        EQU        $02000037
  351. kQTMSKnobFilterTransposeID        EQU        $02000038
  352. kQTMSKnobFilterQID                EQU        $02000039
  353. kQTMSKnobFilterFrequencyEnvelopeID EQU    $0200003A
  354. kQTMSKnobFilterFrequencyEnvelopeDepthID EQU $0200003B
  355. kQTMSKnobFilterQEnvelopeID        EQU        $0200003C
  356. kQTMSKnobFilterQEnvelopeDepthID    EQU        $0200003D            ; Reverb Threshhold
  357. kQTMSKnobReverbThresholdID        EQU        $0200003E
  358. kQTMSKnobLastIDPlus1            EQU        $0200003F
  359.  
  360.  
  361.  
  362.  
  363. kControllerMaximum                EQU        $7FFF                ; +01111111.11111111 
  364. kControllerMinimum                EQU        $8000                ; -10000000.00000000 
  365. SynthesizerDescription    RECORD 0
  366. synthesizerType             ds.l    1                ; offset: $0 (0)        ;  synthesizer type (must be same as component subtype) 
  367. name                     ds        Str31            ; offset: $4 (4)        ;  text name of synthesizer type 
  368. flags                     ds.l    1                ; offset: $24 (36)        ;  from the above enum 
  369. voiceCount                 ds.l    1                ; offset: $28 (40)        ;  maximum polyphony 
  370. partCount                 ds.l    1                ; offset: $2C (44)        ;  maximum multi-timbrality (and midi channels) 
  371. instrumentCount             ds.l    1                ; offset: $30 (48)        ;  non gm, built in (rom) instruments only 
  372. modifiableInstrumentCount  ds.l    1                ; offset: $34 (52)        ;  plus n-more are user modifiable 
  373. channelMask                 ds.l    1                ; offset: $38 (56)        ;  (midi device only) which channels device always uses 
  374. drumPartCount             ds.l    1                ; offset: $3C (60)        ;  maximum multi-timbrality of drum parts 
  375. drumCount                 ds.l    1                ; offset: $40 (64)        ;  non gm, built in (rom) drumkits only 
  376. modifiableDrumCount         ds.l    1                ; offset: $44 (68)        ;  plus n-more are user modifiable 
  377. drumChannelMask             ds.l    1                ; offset: $48 (72)        ;  (midi device only) which channels device always uses 
  378. outputCount                 ds.l    1                ; offset: $4C (76)        ;  number of audio outputs (usually two) 
  379. latency                     ds.l    1                ; offset: $50 (80)        ;  response time in µSec 
  380. controllers                 ds.l    4                ; offset: $54 (84)        ;  array of 128 bits 
  381. gmInstruments             ds.l    4                ; offset: $64 (100)        ;  array of 128 bits 
  382. gmDrums                     ds.l    4                ; offset: $74 (116)        ;  array of 128 bits 
  383. sizeof                     EQU *                    ; size:   $84 (132)
  384.                         ENDR
  385.  
  386. kVoiceCountDynamic                EQU        -1                    ; constant to use to specify dynamic voicing 
  387.  
  388. ToneDescription            RECORD 0
  389. synthesizerType             ds        BigEndianOSType ; offset: $0 (0)        ;  synthesizer type 
  390. synthesizerName             ds        Str31            ; offset: $4 (4)        ;  name of instantiation of synth 
  391. instrumentName             ds        Str31            ; offset: $24 (36)        ;  preferred name for human use 
  392. instrumentNumber         ds        BigEndianLong    ; offset: $44 (68)        ;  inst-number used if synth-name matches 
  393. gmNumber                 ds        BigEndianLong    ; offset: $48 (72)        ;  Best matching general MIDI number 
  394. sizeof                     EQU *                    ; size:   $4C (76)
  395.                         ENDR
  396.  
  397. kFirstGMInstrument                EQU        $00000001
  398. kLastGMInstrument                EQU        $00000080
  399. kFirstGSInstrument                EQU        $00000081
  400. kLastGSInstrument                EQU        $00003FFF
  401. kFirstDrumkit                    EQU        $00004000            ; (first value is "no drum". instrument numbers from 16384->16384+128 are drumkits, and for GM they are _defined_ drumkits! 
  402. kLastDrumkit                    EQU        $00004080
  403. kFirstROMInstrument                EQU        $00008000
  404. kLastROMInstrument                EQU        $0000FFFF
  405. kFirstUserInstrument            EQU        $00010000
  406. kLastUserInstrument                EQU        $0001FFFF
  407. ;  InstrumentMatch
  408.  
  409. kInstrumentMatchSynthesizerType    EQU        1
  410. kInstrumentMatchSynthesizerName    EQU        2
  411. kInstrumentMatchName            EQU        4
  412. kInstrumentMatchNumber            EQU        8
  413. kInstrumentMatchGMNumber        EQU        16
  414. kInstrumentMatchGSNumber        EQU        32
  415. ;  KnobFlags
  416.  
  417. kKnobBasic                        EQU        8                    ; knob shows up in certain simplified lists of knobs 
  418. kKnobReadOnly                    EQU        16                    ; knob value cannot be changed by user or with a SetKnob call 
  419. kKnobInterruptUnsafe            EQU        32                    ; only alter this knob from foreground task time (may access toolbox) 
  420. kKnobKeyrangeOverride            EQU        64                    ; knob can be overridden within a single keyrange (software synth only) 
  421. kKnobGroupStart                    EQU        128                    ; knob is first in some logical group of knobs 
  422. kKnobFixedPoint8                EQU        1024
  423. kKnobFixedPoint16                EQU        2048                ; One of these may be used at a time. 
  424. kKnobTypeNumber                    EQU        $00
  425. kKnobTypeGroupName                EQU        $1000                ; "knob" is really a group name for display purposes 
  426. kKnobTypeBoolean                EQU        $2000                ; if range is greater than 1, its a multi-checkbox field 
  427. kKnobTypeNote                    EQU        $3000                ; knob range is equivalent to MIDI keys 
  428. kKnobTypePan                    EQU        $4000                ; range goes left/right (lose this? ) 
  429. kKnobTypeInstrument                EQU        $5000                ; knob value = reference to another instrument number 
  430. kKnobTypeSetting                EQU        $6000                ; knob value is 1 of n different things (eg, fm algorithms) popup menu 
  431. kKnobTypeMilliseconds            EQU        $7000                ; knob is a millisecond time range 
  432. kKnobTypePercentage                EQU        $8000                ; knob range is displayed as a Percentage 
  433. kKnobTypeHertz                    EQU        $9000                ; knob represents frequency 
  434. kKnobTypeButton                    EQU        $A000                ; momentary trigger push button 
  435.  
  436.  
  437. kUnknownKnobValue                EQU        $7FFFFFFF            ; a knob with this value means, we don't know it. 
  438. kDefaultKnobValue                EQU        $7FFFFFFE            ; used to SET a knob to its default value. 
  439. KnobDescription            RECORD 0
  440. name                     ds        Str63            ; offset: $0 (0)
  441. lowValue                 ds.l    1                ; offset: $40 (64)
  442. highValue                 ds.l    1                ; offset: $44 (68)
  443. defaultValue             ds.l    1                ; offset: $48 (72)        ;  a default instrument is made of all default values 
  444. flags                     ds.l    1                ; offset: $4C (76)
  445. knobID                     ds.l    1                ; offset: $50 (80)
  446. sizeof                     EQU *                    ; size:   $54 (84)
  447.                         ENDR
  448. GCInstrumentData        RECORD 0
  449. tone                     ds        ToneDescription ; offset: $0 (0)
  450. knobCount                 ds.l    1                ; offset: $4C (76)
  451. knob                     ds.l    1                ; offset: $50 (80) <-- really an array of length one
  452. sizeof                     EQU *                    ; size:   $54 (84)
  453.                         ENDR
  454. ; typedef struct GCInstrumentData *        GCInstrumentDataPtr
  455.  
  456. ; typedef GCInstrumentDataPtr *            GCInstrumentDataHandle
  457.  
  458. InstrumentAboutInfo        RECORD 0
  459. p                         ds.l    1                ; offset: $0 (0)
  460. author                     ds        Str255            ; offset: $4 (4)
  461. copyright                 ds        Str255            ; offset: $104 (260)
  462. other                     ds        Str255            ; offset: $204 (516)
  463. sizeof                     EQU *                    ; size:   $304 (772)
  464.                         ENDR
  465.  
  466.  
  467. notImplementedMusicErr            EQU        $8000F7E9
  468. cantSendToSynthesizerErr        EQU        $8000F7E8
  469. cantReceiveFromSynthesizerErr    EQU        $8000F7E7
  470. illegalVoiceAllocationErr        EQU        $8000F7E6
  471. illegalPartErr                    EQU        $8000F7E5
  472. illegalChannelErr                EQU        $8000F7E4
  473. illegalKnobErr                    EQU        $8000F7E3
  474. illegalKnobValueErr                EQU        $8000F7E2
  475. illegalInstrumentErr            EQU        $8000F7E1
  476. illegalControllerErr            EQU        $8000F7E0
  477. midiManagerAbsentErr            EQU        $8000F7DF
  478. synthesizerNotRespondingErr        EQU        $8000F7DE
  479. synthesizerErr                    EQU        $8000F7DD
  480. illegalNoteChannelErr            EQU        $8000F7DC
  481. noteChannelNotAllocatedErr        EQU        $8000F7DB
  482. tunePlayerFullErr                EQU        $8000F7DA
  483. tuneParseErr                    EQU        $8000F7D9
  484.  
  485. kGetAtomicInstNoExpandedSamples    EQU        $01
  486. kGetAtomicInstNoOriginalSamples    EQU        $02
  487. kGetAtomicInstNoSamples            EQU        $03
  488. kGetAtomicInstNoKnobList        EQU        $04
  489. kGetAtomicInstNoInstrumentInfo    EQU        $08
  490. kGetAtomicInstOriginalKnobList    EQU        $10
  491. kGetAtomicInstAllKnobs            EQU        $20                    ; return even those that are set to default
  492.  
  493. ;   For non-gm instruments, instrument number of tone description == 0
  494. ;   If you want to speed up while running, slam the inst num with what Get instrument number returns
  495. ;   All missing knobs are slammed to the default value
  496.  
  497.  
  498.  
  499. kSetAtomicInstKeepOriginalInstrument EQU $01
  500. kSetAtomicInstShareAcrossParts    EQU        $02                    ; inst disappears when app goes away
  501. kSetAtomicInstCallerTosses        EQU        $04                    ; the caller isn't keeping a copy around (for NASetAtomicInstrument)
  502. kSetAtomicInstCallerGuarantees    EQU        $08                    ; the caller guarantees a copy is around
  503. kSetAtomicInstInterruptSafe        EQU        $10                    ; dont move memory at this time (but process at next task time)
  504. kSetAtomicInstDontPreprocess    EQU        $80                    ; perform no further preprocessing because either 1)you know the instrument is digitally clean, or 2) you got it from a GetPartAtomic
  505.  
  506. kInstrumentNamesModifiable        EQU        1
  507. kInstrumentNamesBoth            EQU        2
  508. ; * Structures specific to the GenericMusicComponent
  509.  
  510.  
  511.  
  512. kGenericMusicComponentSubtype    EQU        'gene'
  513. GenericKnobDescription    RECORD 0
  514. kd                         ds        KnobDescription ; offset: $0 (0)
  515. hw1                         ds.l    1                ; offset: $54 (84)        ;  driver defined 
  516. hw2                         ds.l    1                ; offset: $58 (88)        ;  driver defined 
  517. hw3                         ds.l    1                ; offset: $5C (92)        ;  driver defined 
  518. settingsID                 ds.l    1                ; offset: $60 (96)        ;  resource ID list for boolean and popup names 
  519. sizeof                     EQU *                    ; size:   $64 (100)
  520.                         ENDR
  521. GenericKnobDescriptionList RECORD 0
  522. knobCount                 ds.l    1                ; offset: $0 (0)
  523. knob                     ds        GenericKnobDescription ; offset: $4 (4) <-- really an array of length one
  524. sizeof                     EQU *                    ; size:   $68 (104)
  525.                         ENDR
  526. ; typedef struct GenericKnobDescriptionList * GenericKnobDescriptionListPtr
  527.  
  528. ; typedef GenericKnobDescriptionListPtr * GenericKnobDescriptionListHandle
  529.  
  530. ;  knobTypes for MusicDerivedSetKnob 
  531.  
  532. kGenericMusicKnob                EQU        1
  533. kGenericMusicInstrumentKnob        EQU        2
  534. kGenericMusicDrumKnob            EQU        3
  535. kGenericMusicGlobalController    EQU        4
  536.  
  537.  
  538.  
  539. kGenericMusicResFirst            EQU        0
  540. kGenericMusicResMiscStringList    EQU        1                    ; STR# 1: synth name, 2:about author,3:aboutcopyright,4:aboutother 
  541. kGenericMusicResMiscLongList    EQU        2                    ; Long various params, see list below 
  542. kGenericMusicResInstrumentList    EQU        3                    ; NmLs of names and shorts, categories prefixed by '••' 
  543. kGenericMusicResDrumList        EQU        4                    ; NmLs of names and shorts 
  544. kGenericMusicResInstrumentKnobDescriptionList EQU 5            ; Knob 
  545. kGenericMusicResDrumKnobDescriptionList EQU 6                ; Knob 
  546. kGenericMusicResKnobDescriptionList EQU    7                    ; Knob 
  547. kGenericMusicResBitsLongList    EQU        8                    ; Long back to back bitmaps of controllers, gminstruments, and drums 
  548. kGenericMusicResModifiableInstrumentHW EQU 9                ; Shrt same as the hw shorts trailing the instrument names, a shortlist 
  549. kGenericMusicResGMTranslation    EQU        10                    ; Long 128 long entries, 1 for each gm inst, of local instrument numbers 1-n (not hw numbers) 
  550. kGenericMusicResROMInstrumentData EQU    11                    ; knob lists for ROM instruments, so the knob values may be known 
  551. kGenericMusicResAboutPICT        EQU        12                    ; picture for aboutlist. must be present for GetAbout call to work 
  552. kGenericMusicResLast            EQU        13
  553. ;  elements of the misc long list 
  554.  
  555. kGenericMusicMiscLongFirst        EQU        0
  556. kGenericMusicMiscLongVoiceCount    EQU        1
  557. kGenericMusicMiscLongPartCount    EQU        2
  558. kGenericMusicMiscLongModifiableInstrumentCount EQU 3
  559. kGenericMusicMiscLongChannelMask EQU    4
  560. kGenericMusicMiscLongDrumPartCount EQU    5
  561. kGenericMusicMiscLongModifiableDrumCount EQU 6
  562. kGenericMusicMiscLongDrumChannelMask EQU 7
  563. kGenericMusicMiscLongOutputCount EQU    8
  564. kGenericMusicMiscLongLatency    EQU        9
  565. kGenericMusicMiscLongFlags        EQU        10
  566. kGenericMusicMiscLongFirstGMHW    EQU        11                    ; number to add to locate GM main instruments 
  567. kGenericMusicMiscLongFirstGMDrumHW EQU    12                    ; number to add to locate GM drumkits 
  568. kGenericMusicMiscLongFirstUserHW EQU    13                    ; First hw number of user instruments (presumed sequential) 
  569. kGenericMusicMiscLongLast        EQU        14
  570. GCPart                    RECORD 0
  571. hwInstrumentNumber         ds.l    1                ; offset: $0 (0)        ;  internal number of recalled instrument 
  572. controller                 ds.w    128                ; offset: $4 (4)        ;  current values for all controllers 
  573. volume                     ds.l    1                ; offset: $104 (260)    ;  ctrl 7 is special case 
  574. polyphony                 ds.l    1                ; offset: $108 (264)
  575. midiChannel                 ds.l    1                ; offset: $10C (268)    ;  1-16 if in use 
  576. id                         ds        GCInstrumentData ; offset: $110 (272)    ;  ToneDescription & knoblist, uncertain length 
  577. sizeof                     EQU *                    ; size:   $164 (356)
  578.                         ENDR
  579. ; * Calls specific to the GenericMusicComponent
  580.  
  581.  
  582. kMusicGenericRange                EQU        $0100
  583. kMusicDerivedRange                EQU        $0200
  584. ; * Flags in GenericMusicConfigure call
  585.  
  586.  
  587. kGenericMusicDoMIDI                EQU        $01                    ; implement normal MIDI messages for note, controllers, and program changes 0-127 
  588. kGenericMusicBank0                EQU        $02                    ; implement instrument bank changes on controller 0 
  589. kGenericMusicBank32                EQU        $04                    ; implement instrument bank changes on controller 32 
  590. kGenericMusicErsatzMIDI            EQU        $08                    ; construct MIDI packets, but send them to the derived component 
  591. kGenericMusicCallKnobs            EQU        $10                    ; call the derived component with special knob format call 
  592. kGenericMusicCallParts            EQU        $20                    ; call the derived component with special part format call 
  593. kGenericMusicCallInstrument        EQU        $40                    ; call MusicDerivedSetInstrument for MusicSetInstrument calls 
  594. kGenericMusicCallNumber            EQU        $80                    ; call MusicDerivedSetPartInstrumentNumber for MusicSetPartInstrumentNumber calls, & don't send any C0 or bank stuff 
  595. kGenericMusicCallROMInstrument    EQU        $0100                ; call MusicSetInstrument for MusicSetPartInstrumentNumber for "ROM" instruments, passing params from the ROMi resource 
  596. kGenericMusicAllDefaults        EQU        $0200                ; indicates that when a new instrument is recalled, all knobs are reset to DEFAULT settings. True for GS modules 
  597.  
  598.  
  599.  
  600.  
  601. OfflineSampleType        RECORD 0
  602. numChannels                 ds.l    1                ; offset: $0 (0)        ; number of channels,  ie mono = 1
  603. sampleRate                 ds.l    1                ; offset: $4 (4)        ; sample rate in Apples Fixed point representation
  604. sampleSize                 ds.w    1                ; offset: $8 (8)        ; number of bits in sample
  605. sizeof                     EQU *                    ; size:   $A (10)
  606.                         ENDR
  607. InstrumentInfoRecord    RECORD 0
  608. instrumentNumber         ds.l    1                ; offset: $0 (0)        ;  instrument number (if 0, name is a catagory)
  609. flags                     ds.l    1                ; offset: $4 (4)        ;  show in picker, etc.
  610. toneNameIndex             ds.l    1                ; offset: $8 (8)        ;  index in toneNames (1 based)
  611. itxtNameAtomID             ds.l    1                ; offset: $C (12)        ;  index in itxtNames (itxt/name by index)
  612. sizeof                     EQU *                    ; size:   $10 (16)
  613.                         ENDR
  614. InstrumentInfoList        RECORD 0
  615. recordCount                 ds.l    1                ; offset: $0 (0)
  616. toneNames                 ds.l    1                ; offset: $4 (4)        ;  name from tone description
  617. itxtNames                 ds.l    1                ; offset: $8 (8)        ;  itxt/name atoms for instruments
  618. info                     ds        InstrumentInfoRecord ; offset: $C (12) <-- really an array of length one
  619. sizeof                     EQU *                    ; size:   $1C (28)
  620.                         ENDR
  621. ; typedef struct InstrumentInfoList *    InstrumentInfoListPtr
  622.  
  623. ; typedef InstrumentInfoListPtr *        InstrumentInfoListHandle
  624.  
  625. ;
  626. ; pascal ComponentResult MusicGetDescription(MusicComponent mc, SynthesizerDescription *sd)
  627. ;
  628.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  629.         Macro
  630.         _MusicGetDescription
  631.             move.l              #$00040001,-(sp)
  632.             moveq               #0,D0
  633.             dc.w                $A82A
  634.         EndM
  635.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  636.         IMPORT_CFM_FUNCTION MusicGetDescription
  637.     ENDIF
  638.  
  639. ;
  640. ; pascal ComponentResult MusicGetPart(MusicComponent mc, long part, long *midiChannel, long *polyphony)
  641. ;
  642.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  643.         Macro
  644.         _MusicGetPart
  645.             move.l              #$000C0002,-(sp)
  646.             moveq               #0,D0
  647.             dc.w                $A82A
  648.         EndM
  649.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  650.         IMPORT_CFM_FUNCTION MusicGetPart
  651.     ENDIF
  652.  
  653. ;
  654. ; pascal ComponentResult MusicSetPart(MusicComponent mc, long part, long midiChannel, long polyphony)
  655. ;
  656.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  657.         Macro
  658.         _MusicSetPart
  659.             move.l              #$000C0003,-(sp)
  660.             moveq               #0,D0
  661.             dc.w                $A82A
  662.         EndM
  663.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  664.         IMPORT_CFM_FUNCTION MusicSetPart
  665.     ENDIF
  666.  
  667. ;
  668. ; pascal ComponentResult MusicSetPartInstrumentNumber(MusicComponent mc, long part, long instrumentNumber)
  669. ;
  670.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  671.         Macro
  672.         _MusicSetPartInstrumentNumber
  673.             move.l              #$00080004,-(sp)
  674.             moveq               #0,D0
  675.             dc.w                $A82A
  676.         EndM
  677.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  678.         IMPORT_CFM_FUNCTION MusicSetPartInstrumentNumber
  679.     ENDIF
  680.  
  681.  
  682. ;
  683. ; pascal ComponentResult MusicGetPartInstrumentNumber(MusicComponent mc, long part)
  684. ;
  685.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  686.         Macro
  687.         _MusicGetPartInstrumentNumber
  688.             move.l              #$00040005,-(sp)
  689.             moveq               #0,D0
  690.             dc.w                $A82A
  691.         EndM
  692.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  693.         IMPORT_CFM_FUNCTION MusicGetPartInstrumentNumber
  694.     ENDIF
  695.  
  696. ;
  697. ; pascal ComponentResult MusicStorePartInstrument(MusicComponent mc, long part, long instrumentNumber)
  698. ;
  699.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  700.         Macro
  701.         _MusicStorePartInstrument
  702.             move.l              #$00080006,-(sp)
  703.             moveq               #0,D0
  704.             dc.w                $A82A
  705.         EndM
  706.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  707.         IMPORT_CFM_FUNCTION MusicStorePartInstrument
  708.     ENDIF
  709.  
  710.  
  711. ;
  712. ; pascal ComponentResult MusicGetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrument *ai, long flags)
  713. ;
  714.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  715.         Macro
  716.         _MusicGetPartAtomicInstrument
  717.             move.l              #$000C0009,-(sp)
  718.             moveq               #0,D0
  719.             dc.w                $A82A
  720.         EndM
  721.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  722.         IMPORT_CFM_FUNCTION MusicGetPartAtomicInstrument
  723.     ENDIF
  724.  
  725. ;
  726. ; pascal ComponentResult MusicSetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrumentPtr aiP, long flags)
  727. ;
  728.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  729.         Macro
  730.         _MusicSetPartAtomicInstrument
  731.             move.l              #$000C000A,-(sp)
  732.             moveq               #0,D0
  733.             dc.w                $A82A
  734.         EndM
  735.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  736.         IMPORT_CFM_FUNCTION MusicSetPartAtomicInstrument
  737.     ENDIF
  738.  
  739.  
  740. ;  Obsolete calls
  741. ;
  742. ; pascal ComponentResult MusicGetInstrumentKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  743. ;
  744.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  745.         Macro
  746.         _MusicGetInstrumentKnobDescriptionObsolete
  747.             move.l              #$0008000D,-(sp)
  748.             moveq               #0,D0
  749.             dc.w                $A82A
  750.         EndM
  751.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  752.         IMPORT_CFM_FUNCTION MusicGetInstrumentKnobDescriptionObsolete
  753.     ENDIF
  754.  
  755. ;
  756. ; pascal ComponentResult MusicGetDrumKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  757. ;
  758.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  759.         Macro
  760.         _MusicGetDrumKnobDescriptionObsolete
  761.             move.l              #$0008000E,-(sp)
  762.             moveq               #0,D0
  763.             dc.w                $A82A
  764.         EndM
  765.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  766.         IMPORT_CFM_FUNCTION MusicGetDrumKnobDescriptionObsolete
  767.     ENDIF
  768.  
  769. ;
  770. ; pascal ComponentResult MusicGetKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  771. ;
  772.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  773.         Macro
  774.         _MusicGetKnobDescriptionObsolete
  775.             move.l              #$0008000F,-(sp)
  776.             moveq               #0,D0
  777.             dc.w                $A82A
  778.         EndM
  779.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  780.         IMPORT_CFM_FUNCTION MusicGetKnobDescriptionObsolete
  781.     ENDIF
  782.  
  783. ;
  784. ; pascal ComponentResult MusicGetPartKnob(MusicComponent mc, long part, long knobID)
  785. ;
  786.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  787.         Macro
  788.         _MusicGetPartKnob
  789.             move.l              #$00080010,-(sp)
  790.             moveq               #0,D0
  791.             dc.w                $A82A
  792.         EndM
  793.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  794.         IMPORT_CFM_FUNCTION MusicGetPartKnob
  795.     ENDIF
  796.  
  797. ;
  798. ; pascal ComponentResult MusicSetPartKnob(MusicComponent mc, long part, long knobID, long knobValue)
  799. ;
  800.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  801.         Macro
  802.         _MusicSetPartKnob
  803.             move.l              #$000C0011,-(sp)
  804.             moveq               #0,D0
  805.             dc.w                $A82A
  806.         EndM
  807.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  808.         IMPORT_CFM_FUNCTION MusicSetPartKnob
  809.     ENDIF
  810.  
  811. ;
  812. ; pascal ComponentResult MusicGetKnob(MusicComponent mc, long knobID)
  813. ;
  814.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  815.         Macro
  816.         _MusicGetKnob
  817.             move.l              #$00040012,-(sp)
  818.             moveq               #0,D0
  819.             dc.w                $A82A
  820.         EndM
  821.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  822.         IMPORT_CFM_FUNCTION MusicGetKnob
  823.     ENDIF
  824.  
  825. ;
  826. ; pascal ComponentResult MusicSetKnob(MusicComponent mc, long knobID, long knobValue)
  827. ;
  828.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  829.         Macro
  830.         _MusicSetKnob
  831.             move.l              #$00080013,-(sp)
  832.             moveq               #0,D0
  833.             dc.w                $A82A
  834.         EndM
  835.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  836.         IMPORT_CFM_FUNCTION MusicSetKnob
  837.     ENDIF
  838.  
  839. ;
  840. ; pascal ComponentResult MusicGetPartName(MusicComponent mc, long part, StringPtr name)
  841. ;
  842.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  843.         Macro
  844.         _MusicGetPartName
  845.             move.l              #$00080014,-(sp)
  846.             moveq               #0,D0
  847.             dc.w                $A82A
  848.         EndM
  849.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  850.         IMPORT_CFM_FUNCTION MusicGetPartName
  851.     ENDIF
  852.  
  853. ;
  854. ; pascal ComponentResult MusicSetPartName(MusicComponent mc, long part, StringPtr name)
  855. ;
  856.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  857.         Macro
  858.         _MusicSetPartName
  859.             move.l              #$00080015,-(sp)
  860.             moveq               #0,D0
  861.             dc.w                $A82A
  862.         EndM
  863.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  864.         IMPORT_CFM_FUNCTION MusicSetPartName
  865.     ENDIF
  866.  
  867. ;
  868. ; pascal ComponentResult MusicFindTone(MusicComponent mc, ToneDescription *td, long *libraryIndexOut, unsigned long *fit)
  869. ;
  870.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  871.         Macro
  872.         _MusicFindTone
  873.             move.l              #$000C0016,-(sp)
  874.             moveq               #0,D0
  875.             dc.w                $A82A
  876.         EndM
  877.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  878.         IMPORT_CFM_FUNCTION MusicFindTone
  879.     ENDIF
  880.  
  881. ;
  882. ; pascal ComponentResult MusicPlayNote(MusicComponent mc, long part, long pitch, long velocity)
  883. ;
  884.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  885.         Macro
  886.         _MusicPlayNote
  887.             move.l              #$000C0017,-(sp)
  888.             moveq               #0,D0
  889.             dc.w                $A82A
  890.         EndM
  891.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  892.         IMPORT_CFM_FUNCTION MusicPlayNote
  893.     ENDIF
  894.  
  895. ;
  896. ; pascal ComponentResult MusicResetPart(MusicComponent mc, long part)
  897. ;
  898.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  899.         Macro
  900.         _MusicResetPart
  901.             move.l              #$00040018,-(sp)
  902.             moveq               #0,D0
  903.             dc.w                $A82A
  904.         EndM
  905.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  906.         IMPORT_CFM_FUNCTION MusicResetPart
  907.     ENDIF
  908.  
  909. ;
  910. ; pascal ComponentResult MusicSetPartController(MusicComponent mc, long part, MusicController controllerNumber, long controllerValue)
  911. ;
  912.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  913.         Macro
  914.         _MusicSetPartController
  915.             move.l              #$000C0019,-(sp)
  916.             moveq               #0,D0
  917.             dc.w                $A82A
  918.         EndM
  919.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  920.         IMPORT_CFM_FUNCTION MusicSetPartController
  921.     ENDIF
  922.  
  923.  
  924. ;
  925. ; pascal ComponentResult MusicGetPartController(MusicComponent mc, long part, MusicController controllerNumber)
  926. ;
  927.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  928.         Macro
  929.         _MusicGetPartController
  930.             move.l              #$0008001A,-(sp)
  931.             moveq               #0,D0
  932.             dc.w                $A82A
  933.         EndM
  934.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  935.         IMPORT_CFM_FUNCTION MusicGetPartController
  936.     ENDIF
  937.  
  938. ;
  939. ; pascal ComponentResult MusicGetMIDIProc(MusicComponent mc, MusicMIDISendUPP *midiSendProc, long *refCon)
  940. ;
  941.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  942.         Macro
  943.         _MusicGetMIDIProc
  944.             move.l              #$0008001B,-(sp)
  945.             moveq               #0,D0
  946.             dc.w                $A82A
  947.         EndM
  948.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  949.         IMPORT_CFM_FUNCTION MusicGetMIDIProc
  950.     ENDIF
  951.  
  952. ;
  953. ; pascal ComponentResult MusicSetMIDIProc(MusicComponent mc, MusicMIDISendUPP midiSendProc, long refCon)
  954. ;
  955.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  956.         Macro
  957.         _MusicSetMIDIProc
  958.             move.l              #$0008001C,-(sp)
  959.             moveq               #0,D0
  960.             dc.w                $A82A
  961.         EndM
  962.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  963.         IMPORT_CFM_FUNCTION MusicSetMIDIProc
  964.     ENDIF
  965.  
  966. ;
  967. ; pascal ComponentResult MusicGetInstrumentNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNames, Handle *instrumentCategoryLasts, Handle *instrumentCategoryNames)
  968. ;
  969.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  970.         Macro
  971.         _MusicGetInstrumentNames
  972.             move.l              #$0010001D,-(sp)
  973.             moveq               #0,D0
  974.             dc.w                $A82A
  975.         EndM
  976.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  977.         IMPORT_CFM_FUNCTION MusicGetInstrumentNames
  978.     ENDIF
  979.  
  980. ;
  981. ; pascal ComponentResult MusicGetDrumNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNumbers, Handle *instrumentNames)
  982. ;
  983.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  984.         Macro
  985.         _MusicGetDrumNames
  986.             move.l              #$000C001E,-(sp)
  987.             moveq               #0,D0
  988.             dc.w                $A82A
  989.         EndM
  990.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  991.         IMPORT_CFM_FUNCTION MusicGetDrumNames
  992.     ENDIF
  993.  
  994. ;
  995. ; pascal ComponentResult MusicGetMasterTune(MusicComponent mc)
  996. ;
  997.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  998.         Macro
  999.         _MusicGetMasterTune
  1000.             move.l              #$0000001F,-(sp)
  1001.             moveq               #0,D0
  1002.             dc.w                $A82A
  1003.         EndM
  1004.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1005.         IMPORT_CFM_FUNCTION MusicGetMasterTune
  1006.     ENDIF
  1007.  
  1008. ;
  1009. ; pascal ComponentResult MusicSetMasterTune(MusicComponent mc, long masterTune)
  1010. ;
  1011.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1012.         Macro
  1013.         _MusicSetMasterTune
  1014.             move.l              #$00040020,-(sp)
  1015.             moveq               #0,D0
  1016.             dc.w                $A82A
  1017.         EndM
  1018.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1019.         IMPORT_CFM_FUNCTION MusicSetMasterTune
  1020.     ENDIF
  1021.  
  1022.  
  1023. ;
  1024. ; pascal ComponentResult MusicGetInstrumentAboutInfo(MusicComponent mc, long part, InstrumentAboutInfo *iai)
  1025. ;
  1026.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1027.         Macro
  1028.         _MusicGetInstrumentAboutInfo
  1029.             move.l              #$00080022,-(sp)
  1030.             moveq               #0,D0
  1031.             dc.w                $A82A
  1032.         EndM
  1033.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1034.         IMPORT_CFM_FUNCTION MusicGetInstrumentAboutInfo
  1035.     ENDIF
  1036.  
  1037. ;
  1038. ; pascal ComponentResult MusicGetDeviceConnection(MusicComponent mc, long index, long *id1, long *id2)
  1039. ;
  1040.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1041.         Macro
  1042.         _MusicGetDeviceConnection
  1043.             move.l              #$000C0023,-(sp)
  1044.             moveq               #0,D0
  1045.             dc.w                $A82A
  1046.         EndM
  1047.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1048.         IMPORT_CFM_FUNCTION MusicGetDeviceConnection
  1049.     ENDIF
  1050.  
  1051. ;
  1052. ; pascal ComponentResult MusicUseDeviceConnection(MusicComponent mc, long id1, long id2)
  1053. ;
  1054.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1055.         Macro
  1056.         _MusicUseDeviceConnection
  1057.             move.l              #$00080024,-(sp)
  1058.             moveq               #0,D0
  1059.             dc.w                $A82A
  1060.         EndM
  1061.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1062.         IMPORT_CFM_FUNCTION MusicUseDeviceConnection
  1063.     ENDIF
  1064.  
  1065. ;
  1066. ; pascal ComponentResult MusicGetKnobSettingStrings(MusicComponent mc, long knobIndex, long isGlobal, Handle *settingsNames, Handle *settingsCategoryLasts, Handle *settingsCategoryNames)
  1067. ;
  1068.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1069.         Macro
  1070.         _MusicGetKnobSettingStrings
  1071.             move.l              #$00140025,-(sp)
  1072.             moveq               #0,D0
  1073.             dc.w                $A82A
  1074.         EndM
  1075.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1076.         IMPORT_CFM_FUNCTION MusicGetKnobSettingStrings
  1077.     ENDIF
  1078.  
  1079. ;
  1080. ; pascal ComponentResult MusicGetMIDIPorts(MusicComponent mc, long *inputPortCount, long *outputPortCount)
  1081. ;
  1082.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1083.         Macro
  1084.         _MusicGetMIDIPorts
  1085.             move.l              #$00080026,-(sp)
  1086.             moveq               #0,D0
  1087.             dc.w                $A82A
  1088.         EndM
  1089.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1090.         IMPORT_CFM_FUNCTION MusicGetMIDIPorts
  1091.     ENDIF
  1092.  
  1093. ;
  1094. ; pascal ComponentResult MusicSendMIDI(MusicComponent mc, long portIndex, MusicMIDIPacket *mp)
  1095. ;
  1096.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1097.         Macro
  1098.         _MusicSendMIDI
  1099.             move.l              #$00080027,-(sp)
  1100.             moveq               #0,D0
  1101.             dc.w                $A82A
  1102.         EndM
  1103.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1104.         IMPORT_CFM_FUNCTION MusicSendMIDI
  1105.     ENDIF
  1106.  
  1107. ;
  1108. ; pascal ComponentResult MusicReceiveMIDI(MusicComponent mc, MusicMIDIReadHookUPP readHook, long refCon)
  1109. ;
  1110.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1111.         Macro
  1112.         _MusicReceiveMIDI
  1113.             move.l              #$00080028,-(sp)
  1114.             moveq               #0,D0
  1115.             dc.w                $A82A
  1116.         EndM
  1117.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1118.         IMPORT_CFM_FUNCTION MusicReceiveMIDI
  1119.     ENDIF
  1120.  
  1121. ;
  1122. ; pascal ComponentResult MusicStartOffline(MusicComponent mc, unsigned long *numChannels, UnsignedFixed *sampleRate, unsigned short *sampleSize, MusicOfflineDataUPP dataProc, long dataProcRefCon)
  1123. ;
  1124.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1125.         Macro
  1126.         _MusicStartOffline
  1127.             move.l              #$00140029,-(sp)
  1128.             moveq               #0,D0
  1129.             dc.w                $A82A
  1130.         EndM
  1131.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1132.         IMPORT_CFM_FUNCTION MusicStartOffline
  1133.     ENDIF
  1134.  
  1135. ;
  1136. ; pascal ComponentResult MusicSetOfflineTimeTo(MusicComponent mc, long newTimeStamp)
  1137. ;
  1138.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1139.         Macro
  1140.         _MusicSetOfflineTimeTo
  1141.             move.l              #$0004002A,-(sp)
  1142.             moveq               #0,D0
  1143.             dc.w                $A82A
  1144.         EndM
  1145.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1146.         IMPORT_CFM_FUNCTION MusicSetOfflineTimeTo
  1147.     ENDIF
  1148.  
  1149. ;
  1150. ; pascal ComponentResult MusicGetInstrumentKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1151. ;
  1152.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1153.         Macro
  1154.         _MusicGetInstrumentKnobDescription
  1155.             move.l              #$0008002B,-(sp)
  1156.             moveq               #0,D0
  1157.             dc.w                $A82A
  1158.         EndM
  1159.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1160.         IMPORT_CFM_FUNCTION MusicGetInstrumentKnobDescription
  1161.     ENDIF
  1162.  
  1163. ;
  1164. ; pascal ComponentResult MusicGetDrumKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1165. ;
  1166.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1167.         Macro
  1168.         _MusicGetDrumKnobDescription
  1169.             move.l              #$0008002C,-(sp)
  1170.             moveq               #0,D0
  1171.             dc.w                $A82A
  1172.         EndM
  1173.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1174.         IMPORT_CFM_FUNCTION MusicGetDrumKnobDescription
  1175.     ENDIF
  1176.  
  1177. ;
  1178. ; pascal ComponentResult MusicGetKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1179. ;
  1180.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1181.         Macro
  1182.         _MusicGetKnobDescription
  1183.             move.l              #$0008002D,-(sp)
  1184.             moveq               #0,D0
  1185.             dc.w                $A82A
  1186.         EndM
  1187.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1188.         IMPORT_CFM_FUNCTION MusicGetKnobDescription
  1189.     ENDIF
  1190.  
  1191. ;
  1192. ; pascal ComponentResult MusicGetInfoText(MusicComponent mc, long selector, Handle *textH, Handle *styleH)
  1193. ;
  1194.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1195.         Macro
  1196.         _MusicGetInfoText
  1197.             move.l              #$000C002E,-(sp)
  1198.             moveq               #0,D0
  1199.             dc.w                $A82A
  1200.         EndM
  1201.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1202.         IMPORT_CFM_FUNCTION MusicGetInfoText
  1203.     ENDIF
  1204.  
  1205.  
  1206. kGetInstrumentInfoNoBuiltIn        EQU        $01
  1207. kGetInstrumentInfoMidiUserInst    EQU        $02
  1208. kGetInstrumentInfoNoIText        EQU        $04
  1209. ;
  1210. ; pascal ComponentResult MusicGetInstrumentInfo(MusicComponent mc, long getInstrumentInfoFlags, InstrumentInfoListHandle *infoListH)
  1211. ;
  1212.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1213.         Macro
  1214.         _MusicGetInstrumentInfo
  1215.             move.l              #$0008002F,-(sp)
  1216.             moveq               #0,D0
  1217.             dc.w                $A82A
  1218.         EndM
  1219.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1220.         IMPORT_CFM_FUNCTION MusicGetInstrumentInfo
  1221.     ENDIF
  1222.  
  1223.  
  1224.  
  1225.  
  1226. ;
  1227. ; pascal ComponentResult MusicTask(MusicComponent mc)
  1228. ;
  1229.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1230.         Macro
  1231.         _MusicTask
  1232.             move.l              #$00000031,-(sp)
  1233.             moveq               #0,D0
  1234.             dc.w                $A82A
  1235.         EndM
  1236.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1237.         IMPORT_CFM_FUNCTION MusicTask
  1238.     ENDIF
  1239.  
  1240. ;
  1241. ; pascal ComponentResult MusicSetPartInstrumentNumberInterruptSafe(MusicComponent mc, long part, long instrumentNumber)
  1242. ;
  1243.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1244.         Macro
  1245.         _MusicSetPartInstrumentNumberInterruptSafe
  1246.             move.l              #$00080032,-(sp)
  1247.             moveq               #0,D0
  1248.             dc.w                $A82A
  1249.         EndM
  1250.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1251.         IMPORT_CFM_FUNCTION MusicSetPartInstrumentNumberInterruptSafe
  1252.     ENDIF
  1253.  
  1254. ;
  1255. ; pascal ComponentResult MusicSetPartSoundLocalization(MusicComponent mc, long part, Handle data)
  1256. ;
  1257.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1258.         Macro
  1259.         _MusicSetPartSoundLocalization
  1260.             move.l              #$00080033,-(sp)
  1261.             moveq               #0,D0
  1262.             dc.w                $A82A
  1263.         EndM
  1264.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1265.         IMPORT_CFM_FUNCTION MusicSetPartSoundLocalization
  1266.     ENDIF
  1267.  
  1268. ;
  1269. ; pascal ComponentResult MusicGenericConfigure(MusicComponent mc, long mode, long flags, long baseResID)
  1270. ;
  1271.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1272.         Macro
  1273.         _MusicGenericConfigure
  1274.             move.l              #$000C0100,-(sp)
  1275.             moveq               #0,D0
  1276.             dc.w                $A82A
  1277.         EndM
  1278.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1279.         IMPORT_CFM_FUNCTION MusicGenericConfigure
  1280.     ENDIF
  1281.  
  1282. ;
  1283. ; pascal ComponentResult MusicGenericGetPart(MusicComponent mc, long partNumber, GCPart **part)
  1284. ;
  1285.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1286.         Macro
  1287.         _MusicGenericGetPart
  1288.             move.l              #$00080101,-(sp)
  1289.             moveq               #0,D0
  1290.             dc.w                $A82A
  1291.         EndM
  1292.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1293.         IMPORT_CFM_FUNCTION MusicGenericGetPart
  1294.     ENDIF
  1295.  
  1296. ;
  1297. ; pascal ComponentResult MusicGenericGetKnobList(MusicComponent mc, long knobType, GenericKnobDescriptionListHandle *gkdlH)
  1298. ;
  1299.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1300.         Macro
  1301.         _MusicGenericGetKnobList
  1302.             move.l              #$00080102,-(sp)
  1303.             moveq               #0,D0
  1304.             dc.w                $A82A
  1305.         EndM
  1306.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1307.         IMPORT_CFM_FUNCTION MusicGenericGetKnobList
  1308.     ENDIF
  1309.  
  1310. ;
  1311. ; pascal ComponentResult MusicGenericSetResourceNumbers(MusicComponent mc, Handle resourceIDH)
  1312. ;
  1313.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1314.         Macro
  1315.         _MusicGenericSetResourceNumbers
  1316.             move.l              #$00040103,-(sp)
  1317.             moveq               #0,D0
  1318.             dc.w                $A82A
  1319.         EndM
  1320.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1321.         IMPORT_CFM_FUNCTION MusicGenericSetResourceNumbers
  1322.     ENDIF
  1323.  
  1324. ;
  1325. ; pascal ComponentResult MusicDerivedMIDISend(MusicComponent mc, MusicMIDIPacket *packet)
  1326. ;
  1327.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1328.         Macro
  1329.         _MusicDerivedMIDISend
  1330.             move.l              #$00040200,-(sp)
  1331.             moveq               #0,D0
  1332.             dc.w                $A82A
  1333.         EndM
  1334.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1335.         IMPORT_CFM_FUNCTION MusicDerivedMIDISend
  1336.     ENDIF
  1337.  
  1338. ;
  1339. ; pascal ComponentResult MusicDerivedSetKnob(MusicComponent mc, long knobType, long knobNumber, long knobValue, long partNumber, GCPart *p, GenericKnobDescription *gkd)
  1340. ;
  1341.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1342.         Macro
  1343.         _MusicDerivedSetKnob
  1344.             move.l              #$00180201,-(sp)
  1345.             moveq               #0,D0
  1346.             dc.w                $A82A
  1347.         EndM
  1348.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1349.         IMPORT_CFM_FUNCTION MusicDerivedSetKnob
  1350.     ENDIF
  1351.  
  1352. ;
  1353. ; pascal ComponentResult MusicDerivedSetPart(MusicComponent mc, long partNumber, GCPart *p)
  1354. ;
  1355.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1356.         Macro
  1357.         _MusicDerivedSetPart
  1358.             move.l              #$00080202,-(sp)
  1359.             moveq               #0,D0
  1360.             dc.w                $A82A
  1361.         EndM
  1362.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1363.         IMPORT_CFM_FUNCTION MusicDerivedSetPart
  1364.     ENDIF
  1365.  
  1366. ;
  1367. ; pascal ComponentResult MusicDerivedSetInstrument(MusicComponent mc, long partNumber, GCPart *p)
  1368. ;
  1369.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1370.         Macro
  1371.         _MusicDerivedSetInstrument
  1372.             move.l              #$00080203,-(sp)
  1373.             moveq               #0,D0
  1374.             dc.w                $A82A
  1375.         EndM
  1376.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1377.         IMPORT_CFM_FUNCTION MusicDerivedSetInstrument
  1378.     ENDIF
  1379.  
  1380. ;
  1381. ; pascal ComponentResult MusicDerivedSetPartInstrumentNumber(MusicComponent mc, long partNumber, GCPart *p)
  1382. ;
  1383.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1384.         Macro
  1385.         _MusicDerivedSetPartInstrumentNumber
  1386.             move.l              #$00080204,-(sp)
  1387.             moveq               #0,D0
  1388.             dc.w                $A82A
  1389.         EndM
  1390.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1391.         IMPORT_CFM_FUNCTION MusicDerivedSetPartInstrumentNumber
  1392.     ENDIF
  1393.  
  1394. ;
  1395. ; pascal ComponentResult MusicDerivedSetMIDI(MusicComponent mc, MusicMIDISendUPP midiProc, long refcon, long midiChannel)
  1396. ;
  1397.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1398.         Macro
  1399.         _MusicDerivedSetMIDI
  1400.             move.l              #$000C0205,-(sp)
  1401.             moveq               #0,D0
  1402.             dc.w                $A82A
  1403.         EndM
  1404.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1405.         IMPORT_CFM_FUNCTION MusicDerivedSetMIDI
  1406.     ENDIF
  1407.  
  1408. ;
  1409. ; pascal ComponentResult MusicDerivedStorePartInstrument(MusicComponent mc, long partNumber, GCPart *p, long instrumentNumber)
  1410. ;
  1411.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1412.         Macro
  1413.         _MusicDerivedStorePartInstrument
  1414.             move.l              #$000C0206,-(sp)
  1415.             moveq               #0,D0
  1416.             dc.w                $A82A
  1417.         EndM
  1418.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1419.         IMPORT_CFM_FUNCTION MusicDerivedStorePartInstrument
  1420.     ENDIF
  1421.  
  1422. ;
  1423. ; pascal ComponentResult MusicDerivedOpenResFile(MusicComponent mc)
  1424. ;
  1425.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1426.         Macro
  1427.         _MusicDerivedOpenResFile
  1428.             move.l              #$00000207,-(sp)
  1429.             moveq               #0,D0
  1430.             dc.w                $A82A
  1431.         EndM
  1432.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1433.         IMPORT_CFM_FUNCTION MusicDerivedOpenResFile
  1434.     ENDIF
  1435.  
  1436. ;
  1437. ; pascal ComponentResult MusicDerivedCloseResFile(MusicComponent mc, short resRefNum)
  1438. ;
  1439.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1440.         Macro
  1441.         _MusicDerivedCloseResFile
  1442.             move.l              #$00020208,-(sp)
  1443.             moveq               #0,D0
  1444.             dc.w                $A82A
  1445.         EndM
  1446.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1447.         IMPORT_CFM_FUNCTION MusicDerivedCloseResFile
  1448.     ENDIF
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455. ;  Mask bit for returned value by InstrumentFind.
  1456.  
  1457. kInstrumentExactMatch            EQU        $00020000
  1458. kInstrumentRecommendedSubstitute EQU    $00010000
  1459. kInstrumentQualityField            EQU        $FF000000
  1460. kInstrumentRoland8BitQuality    EQU        $05000000
  1461. ; typedef struct InstrumentAboutInfo *    InstrumentAboutInfoPtr
  1462.  
  1463. ; typedef InstrumentAboutInfoPtr *        InstrumentAboutInfoHandle
  1464.  
  1465. GMInstrumentInfo        RECORD 0
  1466. cmpInstID                 ds.l    1                ; offset: $0 (0)
  1467. gmInstNum                 ds.l    1                ; offset: $4 (4)
  1468. instMatch                 ds.l    1                ; offset: $8 (8)
  1469. sizeof                     EQU *                    ; size:   $C (12)
  1470.                         ENDR
  1471. ; typedef struct GMInstrumentInfo *        GMInstrumentInfoPtr
  1472.  
  1473. ; typedef GMInstrumentInfoPtr *            GMInstrumentInfoHandle
  1474.  
  1475. nonGMInstrumentInfoRecord RECORD 0
  1476. cmpInstID                 ds.l    1                ; offset: $0 (0)        ;  if 0, category name
  1477. flags                     ds.l    1                ; offset: $4 (4)        ;  match, show in picker
  1478. toneNameIndex             ds.l    1                ; offset: $8 (8)        ;  index in toneNames (1 based)
  1479. itxtNameAtomID             ds.l    1                ; offset: $C (12)        ;  index in itxtNames (itxt/name by index)
  1480. sizeof                     EQU *                    ; size:   $10 (16)
  1481.                         ENDR
  1482. nonGMInstrumentInfo        RECORD 0
  1483. recordCount                 ds.l    1                ; offset: $0 (0)
  1484. toneNames                 ds.l    1                ; offset: $4 (4)        ;  name from tone description
  1485. itxtNames                 ds.l    1                ; offset: $8 (8)        ;  itext/name atoms for instruments
  1486. instInfo                 ds        nonGMInstrumentInfoRecord ; offset: $C (12) <-- really an array of length one
  1487. sizeof                     EQU *                    ; size:   $1C (28)
  1488.                         ENDR
  1489. ; typedef struct nonGMInstrumentInfo *    nonGMInstrumentInfoPtr
  1490.  
  1491. ; typedef nonGMInstrumentInfoPtr *        nonGMInstrumentInfoHandle
  1492.  
  1493. InstCompInfo            RECORD 0
  1494. infoSize                 ds.l    1                ; offset: $0 (0)        ;  size of this record
  1495. InstrumentLibraryName     ds        Str31            ; offset: $4 (4)
  1496. InstrumentLibraryITxt     ds.l    1                ; offset: $24 (36)        ;  itext/name atoms for instruments
  1497. GMinstrumentCount         ds.l    1                ; offset: $28 (40)
  1498. GMinstrumentInfo         ds.l    1                ; offset: $2C (44)
  1499. GMdrumCount                 ds.l    1                ; offset: $30 (48)
  1500. GMdrumInfo                 ds.l    1                ; offset: $34 (52)
  1501. nonGMinstrumentCount     ds.l    1                ; offset: $38 (56)
  1502. nonGMinstrumentInfo         ds.l    1                ; offset: $3C (60)
  1503. sizeof                     EQU *                    ; size:   $40 (64)
  1504.                         ENDR
  1505. ; typedef struct InstCompInfo *            InstCompInfoPtr
  1506.  
  1507. ; typedef InstCompInfoPtr *                InstCompInfoHandle
  1508.  
  1509. ;
  1510. ; pascal ComponentResult InstrumentGetInst(ComponentInstance ci, long instID, AtomicInstrument *atomicInst, long flags)
  1511. ;
  1512.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1513.         Macro
  1514.         _InstrumentGetInst
  1515.             move.l              #$000C0001,-(sp)
  1516.             moveq               #0,D0
  1517.             dc.w                $A82A
  1518.         EndM
  1519.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1520.         IMPORT_CFM_FUNCTION InstrumentGetInst
  1521.     ENDIF
  1522.  
  1523. ;
  1524. ; pascal ComponentResult InstrumentGetInfo(ComponentInstance ci, long getInstrumentInfoFlags, InstCompInfoHandle *instInfo)
  1525. ;
  1526.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1527.         Macro
  1528.         _InstrumentGetInfo
  1529.             move.l              #$00080002,-(sp)
  1530.             moveq               #0,D0
  1531.             dc.w                $A82A
  1532.         EndM
  1533.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1534.         IMPORT_CFM_FUNCTION InstrumentGetInfo
  1535.     ENDIF
  1536.  
  1537. ;
  1538. ; pascal ComponentResult InstrumentInitialize(ComponentInstance ci, long initFormat, void *initParams)
  1539. ;
  1540.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1541.         Macro
  1542.         _InstrumentInitialize
  1543.             move.l              #$00080003,-(sp)
  1544.             moveq               #0,D0
  1545.             dc.w                $A82A
  1546.         EndM
  1547.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1548.         IMPORT_CFM_FUNCTION InstrumentInitialize
  1549.     ENDIF
  1550.  
  1551. ;
  1552. ; pascal ComponentResult InstrumentOpenComponentResFile(ComponentInstance ci, short *resFile)
  1553. ;
  1554.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1555.         Macro
  1556.         _InstrumentOpenComponentResFile
  1557.             move.l              #$00040004,-(sp)
  1558.             moveq               #0,D0
  1559.             dc.w                $A82A
  1560.         EndM
  1561.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1562.         IMPORT_CFM_FUNCTION InstrumentOpenComponentResFile
  1563.     ENDIF
  1564.  
  1565. ;
  1566. ; pascal ComponentResult InstrumentCloseComponentResFile(ComponentInstance ci, short resFile)
  1567. ;
  1568.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1569.         Macro
  1570.         _InstrumentCloseComponentResFile
  1571.             move.l              #$00020005,-(sp)
  1572.             moveq               #0,D0
  1573.             dc.w                $A82A
  1574.         EndM
  1575.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1576.         IMPORT_CFM_FUNCTION InstrumentCloseComponentResFile
  1577.     ENDIF
  1578.  
  1579. ;
  1580. ; pascal ComponentResult InstrumentGetComponentRefCon(ComponentInstance ci, void **refCon)
  1581. ;
  1582.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1583.         Macro
  1584.         _InstrumentGetComponentRefCon
  1585.             move.l              #$00040006,-(sp)
  1586.             moveq               #0,D0
  1587.             dc.w                $A82A
  1588.         EndM
  1589.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1590.         IMPORT_CFM_FUNCTION InstrumentGetComponentRefCon
  1591.     ENDIF
  1592.  
  1593. ;
  1594. ; pascal ComponentResult InstrumentSetComponentRefCon(ComponentInstance ci, void *refCon)
  1595. ;
  1596.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1597.         Macro
  1598.         _InstrumentSetComponentRefCon
  1599.             move.l              #$00040007,-(sp)
  1600.             moveq               #0,D0
  1601.             dc.w                $A82A
  1602.         EndM
  1603.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1604.         IMPORT_CFM_FUNCTION InstrumentSetComponentRefCon
  1605.     ENDIF
  1606.  
  1607. ;
  1608. ; pascal ComponentResult InstrumentGetSynthesizerType(ComponentInstance ci, OSType *synthesizerType)
  1609. ;
  1610.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1611.         Macro
  1612.         _InstrumentGetSynthesizerType
  1613.             move.l              #$00040008,-(sp)
  1614.             moveq               #0,D0
  1615.             dc.w                $A82A
  1616.         EndM
  1617.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1618.         IMPORT_CFM_FUNCTION InstrumentGetSynthesizerType
  1619.     ENDIF
  1620.  
  1621.  
  1622.  
  1623. ; --------------------------
  1624. ;    Types
  1625. ;--------------------------
  1626.  
  1627.  
  1628. kNoteRequestNoGM                EQU        1                    ; dont degrade to a GM synth 
  1629. kNoteRequestNoSynthType            EQU        2                    ; dont degrade to another synth of same type but different name 
  1630. kNoteRequestSynthMustMatch        EQU        4                    ; synthType must be a match, including kGMSynthComponentSubType 
  1631. ; typedef ComponentInstance             NoteAllocator
  1632.  
  1633. NoteRequestInfo            RECORD 0
  1634. flags                     ds.b    1                ; offset: $0 (0)        ;  1: dont accept GM match, 2: dont accept same-synth-type match 
  1635. reserved                 ds.b    1                ; offset: $1 (1)        ;  must be zero 
  1636. polyphony                 ds        BigEndianShort ; offset: $2 (2)            ;  Maximum number of voices 
  1637. typicalPolyphony         ds        BigEndianFixed ; offset: $4 (4)            ;  Hint for level mixing 
  1638. sizeof                     EQU *                    ; size:   $8 (8)
  1639.                         ENDR
  1640. NoteRequest                RECORD 0
  1641. info                     ds        NoteRequestInfo ; offset: $0 (0)
  1642. tone                     ds        ToneDescription ; offset: $8 (8)
  1643. sizeof                     EQU *                    ; size:   $54 (84)
  1644.                         ENDR
  1645.  
  1646.  
  1647.  
  1648.  
  1649. kPickDontMix                    EQU        1                    ; dont mix instruments with drum sounds 
  1650. kPickSameSynth                    EQU        2                    ; only allow the same device that went in, to come out 
  1651. kPickUserInsts                    EQU        4                    ; show user insts in addition to ROM voices 
  1652. kPickEditAllowEdit                EQU        8                    ; lets user switch over to edit mode 
  1653. kPickEditAllowPick                EQU        16                    ; lets the user switch over to pick mode 
  1654. kPickEditSynthGlobal            EQU        32                    ; edit the global knobs of the synth 
  1655. kPickEditControllers            EQU        64                    ; edit the controllers of the notechannel 
  1656.  
  1657.  
  1658. kNoteAllocatorComponentType        EQU        'nota'
  1659.  
  1660. ; --------------------------------
  1661. ;    Note Allocator Prototypes
  1662. ;--------------------------------
  1663.  
  1664. ;
  1665. ; pascal ComponentResult NARegisterMusicDevice(NoteAllocator na, OSType synthType, Str31 name, SynthesizerConnections *connections)
  1666. ;
  1667.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1668.         Macro
  1669.         _NARegisterMusicDevice
  1670.             move.l              #$000C0000,-(sp)
  1671.             moveq               #0,D0
  1672.             dc.w                $A82A
  1673.         EndM
  1674.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1675.         IMPORT_CFM_FUNCTION NARegisterMusicDevice
  1676.     ENDIF
  1677.  
  1678. ;
  1679. ; pascal ComponentResult NAUnregisterMusicDevice(NoteAllocator na, long index)
  1680. ;
  1681.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1682.         Macro
  1683.         _NAUnregisterMusicDevice
  1684.             move.l              #$00040001,-(sp)
  1685.             moveq               #0,D0
  1686.             dc.w                $A82A
  1687.         EndM
  1688.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1689.         IMPORT_CFM_FUNCTION NAUnregisterMusicDevice
  1690.     ENDIF
  1691.  
  1692. ;
  1693. ; pascal ComponentResult NAGetRegisteredMusicDevice(NoteAllocator na, long index, OSType *synthType, Str31 name, SynthesizerConnections *connections, MusicComponent *mc)
  1694. ;
  1695.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1696.         Macro
  1697.         _NAGetRegisteredMusicDevice
  1698.             move.l              #$00140002,-(sp)
  1699.             moveq               #0,D0
  1700.             dc.w                $A82A
  1701.         EndM
  1702.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1703.         IMPORT_CFM_FUNCTION NAGetRegisteredMusicDevice
  1704.     ENDIF
  1705.  
  1706. ;
  1707. ; pascal ComponentResult NASaveMusicConfiguration(NoteAllocator na)
  1708. ;
  1709.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1710.         Macro
  1711.         _NASaveMusicConfiguration
  1712.             move.l              #$00000003,-(sp)
  1713.             moveq               #0,D0
  1714.             dc.w                $A82A
  1715.         EndM
  1716.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1717.         IMPORT_CFM_FUNCTION NASaveMusicConfiguration
  1718.     ENDIF
  1719.  
  1720. ;
  1721. ; pascal ComponentResult NANewNoteChannel(NoteAllocator na, NoteRequest *noteRequest, NoteChannel *outChannel)
  1722. ;
  1723.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1724.         Macro
  1725.         _NANewNoteChannel
  1726.             move.l              #$00080004,-(sp)
  1727.             moveq               #0,D0
  1728.             dc.w                $A82A
  1729.         EndM
  1730.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1731.         IMPORT_CFM_FUNCTION NANewNoteChannel
  1732.     ENDIF
  1733.  
  1734. ;
  1735. ; pascal ComponentResult NADisposeNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1736. ;
  1737.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1738.         Macro
  1739.         _NADisposeNoteChannel
  1740.             move.l              #$00040005,-(sp)
  1741.             moveq               #0,D0
  1742.             dc.w                $A82A
  1743.         EndM
  1744.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1745.         IMPORT_CFM_FUNCTION NADisposeNoteChannel
  1746.     ENDIF
  1747.  
  1748. ;
  1749. ; pascal ComponentResult NAGetNoteChannelInfo(NoteAllocator na, NoteChannel noteChannel, long *index, long *part)
  1750. ;
  1751.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1752.         Macro
  1753.         _NAGetNoteChannelInfo
  1754.             move.l              #$000C0006,-(sp)
  1755.             moveq               #0,D0
  1756.             dc.w                $A82A
  1757.         EndM
  1758.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1759.         IMPORT_CFM_FUNCTION NAGetNoteChannelInfo
  1760.     ENDIF
  1761.  
  1762. ;
  1763. ; pascal ComponentResult NAPrerollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1764. ;
  1765.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1766.         Macro
  1767.         _NAPrerollNoteChannel
  1768.             move.l              #$00040007,-(sp)
  1769.             moveq               #0,D0
  1770.             dc.w                $A82A
  1771.         EndM
  1772.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1773.         IMPORT_CFM_FUNCTION NAPrerollNoteChannel
  1774.     ENDIF
  1775.  
  1776. ;
  1777. ; pascal ComponentResult NAUnrollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1778. ;
  1779.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1780.         Macro
  1781.         _NAUnrollNoteChannel
  1782.             move.l              #$00040008,-(sp)
  1783.             moveq               #0,D0
  1784.             dc.w                $A82A
  1785.         EndM
  1786.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1787.         IMPORT_CFM_FUNCTION NAUnrollNoteChannel
  1788.     ENDIF
  1789.  
  1790.  
  1791. ;
  1792. ; pascal ComponentResult NASetNoteChannelVolume(NoteAllocator na, NoteChannel noteChannel, Fixed volume)
  1793. ;
  1794.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1795.         Macro
  1796.         _NASetNoteChannelVolume
  1797.             move.l              #$0008000B,-(sp)
  1798.             moveq               #0,D0
  1799.             dc.w                $A82A
  1800.         EndM
  1801.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1802.         IMPORT_CFM_FUNCTION NASetNoteChannelVolume
  1803.     ENDIF
  1804.  
  1805. ;
  1806. ; pascal ComponentResult NAResetNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  1807. ;
  1808.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1809.         Macro
  1810.         _NAResetNoteChannel
  1811.             move.l              #$0004000C,-(sp)
  1812.             moveq               #0,D0
  1813.             dc.w                $A82A
  1814.         EndM
  1815.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1816.         IMPORT_CFM_FUNCTION NAResetNoteChannel
  1817.     ENDIF
  1818.  
  1819. ;
  1820. ; pascal ComponentResult NAPlayNote(NoteAllocator na, NoteChannel noteChannel, long pitch, long velocity)
  1821. ;
  1822.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1823.         Macro
  1824.         _NAPlayNote
  1825.             move.l              #$000C000D,-(sp)
  1826.             moveq               #0,D0
  1827.             dc.w                $A82A
  1828.         EndM
  1829.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1830.         IMPORT_CFM_FUNCTION NAPlayNote
  1831.     ENDIF
  1832.  
  1833. ;
  1834. ; pascal ComponentResult NASetController(NoteAllocator na, NoteChannel noteChannel, long controllerNumber, long controllerValue)
  1835. ;
  1836.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1837.         Macro
  1838.         _NASetController
  1839.             move.l              #$000C000E,-(sp)
  1840.             moveq               #0,D0
  1841.             dc.w                $A82A
  1842.         EndM
  1843.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1844.         IMPORT_CFM_FUNCTION NASetController
  1845.     ENDIF
  1846.  
  1847. ;
  1848. ; pascal ComponentResult NASetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber, long knobValue)
  1849. ;
  1850.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1851.         Macro
  1852.         _NASetKnob
  1853.             move.l              #$000C000F,-(sp)
  1854.             moveq               #0,D0
  1855.             dc.w                $A82A
  1856.         EndM
  1857.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1858.         IMPORT_CFM_FUNCTION NASetKnob
  1859.     ENDIF
  1860.  
  1861. ;
  1862. ; pascal ComponentResult NAFindNoteChannelTone(NoteAllocator na, NoteChannel noteChannel, ToneDescription *td, long *instrumentNumber)
  1863. ;
  1864.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1865.         Macro
  1866.         _NAFindNoteChannelTone
  1867.             move.l              #$000C0010,-(sp)
  1868.             moveq               #0,D0
  1869.             dc.w                $A82A
  1870.         EndM
  1871.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1872.         IMPORT_CFM_FUNCTION NAFindNoteChannelTone
  1873.     ENDIF
  1874.  
  1875. ;
  1876. ; pascal ComponentResult NASetInstrumentNumber(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber)
  1877. ;
  1878.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1879.         Macro
  1880.         _NASetInstrumentNumber
  1881.             move.l              #$00080011,-(sp)
  1882.             moveq               #0,D0
  1883.             dc.w                $A82A
  1884.         EndM
  1885.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1886.         IMPORT_CFM_FUNCTION NASetInstrumentNumber
  1887.     ENDIF
  1888.  
  1889.  
  1890.  
  1891. ;
  1892. ; pascal ComponentResult NAPickInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, ToneDescription *sd, unsigned long flags, long refCon, long reserved1, long reserved2)
  1893. ;
  1894.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1895.         Macro
  1896.         _NAPickInstrument
  1897.             move.l              #$001C0012,-(sp)
  1898.             moveq               #0,D0
  1899.             dc.w                $A82A
  1900.         EndM
  1901.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1902.         IMPORT_CFM_FUNCTION NAPickInstrument
  1903.     ENDIF
  1904.  
  1905. ;
  1906. ; pascal ComponentResult NAPickArrangement(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, long zero1, long zero2, Track t, StringPtr songName)
  1907. ;
  1908.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1909.         Macro
  1910.         _NAPickArrangement
  1911.             move.l              #$00180013,-(sp)
  1912.             moveq               #0,D0
  1913.             dc.w                $A82A
  1914.         EndM
  1915.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1916.         IMPORT_CFM_FUNCTION NAPickArrangement
  1917.     ENDIF
  1918.  
  1919.  
  1920. ;
  1921. ; pascal ComponentResult NASetDefaultMIDIInput(NoteAllocator na, SynthesizerConnections *sc)
  1922. ;
  1923.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1924.         Macro
  1925.         _NASetDefaultMIDIInput
  1926.             move.l              #$00040015,-(sp)
  1927.             moveq               #0,D0
  1928.             dc.w                $A82A
  1929.         EndM
  1930.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1931.         IMPORT_CFM_FUNCTION NASetDefaultMIDIInput
  1932.     ENDIF
  1933.  
  1934. ;
  1935. ; pascal ComponentResult NAGetDefaultMIDIInput(NoteAllocator na, SynthesizerConnections *sc)
  1936. ;
  1937.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1938.         Macro
  1939.         _NAGetDefaultMIDIInput
  1940.             move.l              #$00040016,-(sp)
  1941.             moveq               #0,D0
  1942.             dc.w                $A82A
  1943.         EndM
  1944.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1945.         IMPORT_CFM_FUNCTION NAGetDefaultMIDIInput
  1946.     ENDIF
  1947.  
  1948.  
  1949. ;
  1950. ; pascal ComponentResult NAUseDefaultMIDIInput(NoteAllocator na, MusicMIDIReadHookUPP readHook, long refCon, unsigned long flags)
  1951. ;
  1952.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1953.         Macro
  1954.         _NAUseDefaultMIDIInput
  1955.             move.l              #$000C0019,-(sp)
  1956.             moveq               #0,D0
  1957.             dc.w                $A82A
  1958.         EndM
  1959.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1960.         IMPORT_CFM_FUNCTION NAUseDefaultMIDIInput
  1961.     ENDIF
  1962.  
  1963. ;
  1964. ; pascal ComponentResult NALoseDefaultMIDIInput(NoteAllocator na)
  1965. ;
  1966.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1967.         Macro
  1968.         _NALoseDefaultMIDIInput
  1969.             move.l              #$0000001A,-(sp)
  1970.             moveq               #0,D0
  1971.             dc.w                $A82A
  1972.         EndM
  1973.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1974.         IMPORT_CFM_FUNCTION NALoseDefaultMIDIInput
  1975.     ENDIF
  1976.  
  1977. ;
  1978. ; pascal ComponentResult NAStuffToneDescription(NoteAllocator na, long gmNumber, ToneDescription *td)
  1979. ;
  1980.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1981.         Macro
  1982.         _NAStuffToneDescription
  1983.             move.l              #$0008001B,-(sp)
  1984.             moveq               #0,D0
  1985.             dc.w                $A82A
  1986.         EndM
  1987.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1988.         IMPORT_CFM_FUNCTION NAStuffToneDescription
  1989.     ENDIF
  1990.  
  1991. ;
  1992. ; pascal ComponentResult NACopyrightDialog(NoteAllocator na, PicHandle p, StringPtr author, StringPtr copyright, StringPtr other, StringPtr title, ModalFilterUPP filterProc, long refCon)
  1993. ;
  1994.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1995.         Macro
  1996.         _NACopyrightDialog
  1997.             move.l              #$001C001C,-(sp)
  1998.             moveq               #0,D0
  1999.             dc.w                $A82A
  2000.         EndM
  2001.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2002.         IMPORT_CFM_FUNCTION NACopyrightDialog
  2003.     ENDIF
  2004.  
  2005.  
  2006.  
  2007. ;      kNADummyOneSelect = 29
  2008. ;      kNADummyTwoSelect = 30
  2009.  
  2010.  
  2011.  
  2012. ;
  2013. ; pascal ComponentResult NAGetIndNoteChannel(NoteAllocator na, long index, NoteChannel *nc, long *seed)
  2014. ;
  2015.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2016.         Macro
  2017.         _NAGetIndNoteChannel
  2018.             move.l              #$000C001F,-(sp)
  2019.             moveq               #0,D0
  2020.             dc.w                $A82A
  2021.         EndM
  2022.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2023.         IMPORT_CFM_FUNCTION NAGetIndNoteChannel
  2024.     ENDIF
  2025.  
  2026.  
  2027. ;
  2028. ; pascal ComponentResult NAGetMIDIPorts(NoteAllocator na, QTMIDIPortListHandle *inputPorts, QTMIDIPortListHandle *outputPorts)
  2029. ;
  2030.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2031.         Macro
  2032.         _NAGetMIDIPorts
  2033.             move.l              #$00080021,-(sp)
  2034.             moveq               #0,D0
  2035.             dc.w                $A82A
  2036.         EndM
  2037.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2038.         IMPORT_CFM_FUNCTION NAGetMIDIPorts
  2039.     ENDIF
  2040.  
  2041. ;
  2042. ; pascal ComponentResult NAGetNoteRequest(NoteAllocator na, NoteChannel noteChannel, NoteRequest *nrOut)
  2043. ;
  2044.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2045.         Macro
  2046.         _NAGetNoteRequest
  2047.             move.l              #$00080022,-(sp)
  2048.             moveq               #0,D0
  2049.             dc.w                $A82A
  2050.         EndM
  2051.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2052.         IMPORT_CFM_FUNCTION NAGetNoteRequest
  2053.     ENDIF
  2054.  
  2055. ;
  2056. ; pascal ComponentResult NASendMIDI(NoteAllocator na, NoteChannel noteChannel, MusicMIDIPacket *mp)
  2057. ;
  2058.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2059.         Macro
  2060.         _NASendMIDI
  2061.             move.l              #$00080023,-(sp)
  2062.             moveq               #0,D0
  2063.             dc.w                $A82A
  2064.         EndM
  2065.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2066.         IMPORT_CFM_FUNCTION NASendMIDI
  2067.     ENDIF
  2068.  
  2069. ;
  2070. ; pascal ComponentResult NAPickEditInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, long refCon, NoteChannel nc, AtomicInstrument ai, long flags)
  2071. ;
  2072.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2073.         Macro
  2074.         _NAPickEditInstrument
  2075.             move.l              #$00180024,-(sp)
  2076.             moveq               #0,D0
  2077.             dc.w                $A82A
  2078.         EndM
  2079.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2080.         IMPORT_CFM_FUNCTION NAPickEditInstrument
  2081.     ENDIF
  2082.  
  2083. ;
  2084. ; pascal ComponentResult NANewNoteChannelFromAtomicInstrument(NoteAllocator na, AtomicInstrumentPtr instrument, long flags, NoteChannel *outChannel)
  2085. ;
  2086.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2087.         Macro
  2088.         _NANewNoteChannelFromAtomicInstrument
  2089.             move.l              #$000C0025,-(sp)
  2090.             moveq               #0,D0
  2091.             dc.w                $A82A
  2092.         EndM
  2093.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2094.         IMPORT_CFM_FUNCTION NANewNoteChannelFromAtomicInstrument
  2095.     ENDIF
  2096.  
  2097. ;
  2098. ; pascal ComponentResult NASetAtomicInstrument(NoteAllocator na, NoteChannel noteChannel, AtomicInstrumentPtr instrument, long flags)
  2099. ;
  2100.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2101.         Macro
  2102.         _NASetAtomicInstrument
  2103.             move.l              #$000C0026,-(sp)
  2104.             moveq               #0,D0
  2105.             dc.w                $A82A
  2106.         EndM
  2107.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2108.         IMPORT_CFM_FUNCTION NASetAtomicInstrument
  2109.     ENDIF
  2110.  
  2111.  
  2112.  
  2113. ;
  2114. ; pascal ComponentResult NAGetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber, long *knobValue)
  2115. ;
  2116.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2117.         Macro
  2118.         _NAGetKnob
  2119.             move.l              #$000C0028,-(sp)
  2120.             moveq               #0,D0
  2121.             dc.w                $A82A
  2122.         EndM
  2123.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2124.         IMPORT_CFM_FUNCTION NAGetKnob
  2125.     ENDIF
  2126.  
  2127. ;
  2128. ; pascal ComponentResult NATask(NoteAllocator na)
  2129. ;
  2130.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2131.         Macro
  2132.         _NATask
  2133.             move.l              #$00000029,-(sp)
  2134.             moveq               #0,D0
  2135.             dc.w                $A82A
  2136.         EndM
  2137.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2138.         IMPORT_CFM_FUNCTION NATask
  2139.     ENDIF
  2140.  
  2141. ;
  2142. ; pascal ComponentResult NASetNoteChannelBalance(NoteAllocator na, NoteChannel noteChannel, long balance)
  2143. ;
  2144.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2145.         Macro
  2146.         _NASetNoteChannelBalance
  2147.             move.l              #$0008002A,-(sp)
  2148.             moveq               #0,D0
  2149.             dc.w                $A82A
  2150.         EndM
  2151.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2152.         IMPORT_CFM_FUNCTION NASetNoteChannelBalance
  2153.     ENDIF
  2154.  
  2155. ;
  2156. ; pascal ComponentResult NASetInstrumentNumberInterruptSafe(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber)
  2157. ;
  2158.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2159.         Macro
  2160.         _NASetInstrumentNumberInterruptSafe
  2161.             move.l              #$0008002B,-(sp)
  2162.             moveq               #0,D0
  2163.             dc.w                $A82A
  2164.         EndM
  2165.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2166.         IMPORT_CFM_FUNCTION NASetInstrumentNumberInterruptSafe
  2167.     ENDIF
  2168.  
  2169. ;
  2170. ; pascal ComponentResult NASetNoteChannelSoundLocalization(NoteAllocator na, NoteChannel noteChannel, Handle data)
  2171. ;
  2172.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2173.         Macro
  2174.         _NASetNoteChannelSoundLocalization
  2175.             move.l              #$0008002C,-(sp)
  2176.             moveq               #0,D0
  2177.             dc.w                $A82A
  2178.         EndM
  2179.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2180.         IMPORT_CFM_FUNCTION NASetNoteChannelSoundLocalization
  2181.     ENDIF
  2182.  
  2183. ;
  2184. ; pascal ComponentResult NAGetController(NoteAllocator na, NoteChannel noteChannel, long controllerNumber, long *controllerValue)
  2185. ;
  2186.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2187.         Macro
  2188.         _NAGetController
  2189.             move.l              #$000C002D,-(sp)
  2190.             moveq               #0,D0
  2191.             dc.w                $A82A
  2192.         EndM
  2193.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2194.         IMPORT_CFM_FUNCTION NAGetController
  2195.     ENDIF
  2196.  
  2197.  
  2198.  
  2199.  
  2200.  
  2201.  
  2202. kTuneQueueDepth                    EQU        8                    ; Deepest you can queue tune segments 
  2203.  
  2204. TuneStatus                RECORD 0
  2205. tune                     ds.l    1                ; offset: $0 (0)        ;  currently playing tune 
  2206. tunePtr                     ds.l    1                ; offset: $4 (4)        ;  position within currently playing piece 
  2207. time                     ds.l    1                ; offset: $8 (8)        ;  current tune time 
  2208. queueCount                 ds.w    1                ; offset: $C (12)        ;  how many pieces queued up? 
  2209. queueSpots                 ds.w    1                ; offset: $E (14)        ;  How many more tunepieces can be queued 
  2210. queueTime                 ds.l    1                ; offset: $10 (16)        ;  How much time is queued up? (can be very inaccurate) 
  2211. reserved                 ds.l    3                ; offset: $14 (20)
  2212. sizeof                     EQU *                    ; size:   $20 (32)
  2213.                         ENDR
  2214. ; typedef ComponentInstance             TunePlayer
  2215.  
  2216.  
  2217. kTunePlayerComponentType        EQU        'tune'
  2218.  
  2219. ;
  2220. ; pascal ComponentResult TuneSetHeader(TunePlayer tp, unsigned long *header)
  2221. ;
  2222.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2223.         Macro
  2224.         _TuneSetHeader
  2225.             move.l              #$00040004,-(sp)
  2226.             moveq               #0,D0
  2227.             dc.w                $A82A
  2228.         EndM
  2229.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2230.         IMPORT_CFM_FUNCTION TuneSetHeader
  2231.     ENDIF
  2232.  
  2233. ;
  2234. ; pascal ComponentResult TuneGetTimeBase(TunePlayer tp, TimeBase *tb)
  2235. ;
  2236.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2237.         Macro
  2238.         _TuneGetTimeBase
  2239.             move.l              #$00040005,-(sp)
  2240.             moveq               #0,D0
  2241.             dc.w                $A82A
  2242.         EndM
  2243.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2244.         IMPORT_CFM_FUNCTION TuneGetTimeBase
  2245.     ENDIF
  2246.  
  2247. ;
  2248. ; pascal ComponentResult TuneSetTimeScale(TunePlayer tp, TimeScale scale)
  2249. ;
  2250.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2251.         Macro
  2252.         _TuneSetTimeScale
  2253.             move.l              #$00040006,-(sp)
  2254.             moveq               #0,D0
  2255.             dc.w                $A82A
  2256.         EndM
  2257.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2258.         IMPORT_CFM_FUNCTION TuneSetTimeScale
  2259.     ENDIF
  2260.  
  2261. ;
  2262. ; pascal ComponentResult TuneGetTimeScale(TunePlayer tp, TimeScale *scale)
  2263. ;
  2264.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2265.         Macro
  2266.         _TuneGetTimeScale
  2267.             move.l              #$00040007,-(sp)
  2268.             moveq               #0,D0
  2269.             dc.w                $A82A
  2270.         EndM
  2271.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2272.         IMPORT_CFM_FUNCTION TuneGetTimeScale
  2273.     ENDIF
  2274.  
  2275. ;
  2276. ; pascal ComponentResult TuneGetIndexedNoteChannel(TunePlayer tp, long i, NoteChannel *nc)
  2277. ;
  2278.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2279.         Macro
  2280.         _TuneGetIndexedNoteChannel
  2281.             move.l              #$00080008,-(sp)
  2282.             moveq               #0,D0
  2283.             dc.w                $A82A
  2284.         EndM
  2285.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2286.         IMPORT_CFM_FUNCTION TuneGetIndexedNoteChannel
  2287.     ENDIF
  2288.  
  2289.  
  2290. ;  Values for when to start. 
  2291.  
  2292. kTuneStartNow                    EQU        1                    ; start after buffer is implied 
  2293. kTuneDontClipNotes                EQU        2                    ; allow notes to finish their durations outside sample 
  2294. kTuneExcludeEdgeNotes            EQU        4                    ; dont play notes that start at end of tune 
  2295. kTuneQuickStart                    EQU        8                    ; Leave all the controllers where they are, ignore start time 
  2296. kTuneLoopUntil                    EQU        16                    ; loop a queued tune if there's nothing else in the queue 
  2297. kTuneStartNewMaster                EQU        16384
  2298. ;
  2299. ; pascal ComponentResult TuneQueue(TunePlayer tp, unsigned long *tune, Fixed tuneRate, unsigned long tuneStartPosition, unsigned long tuneStopPosition, unsigned long queueFlags, TuneCallBackUPP callBackProc, long refCon)
  2300. ;
  2301.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2302.         Macro
  2303.         _TuneQueue
  2304.             move.l              #$001C000A,-(sp)
  2305.             moveq               #0,D0
  2306.             dc.w                $A82A
  2307.         EndM
  2308.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2309.         IMPORT_CFM_FUNCTION TuneQueue
  2310.     ENDIF
  2311.  
  2312. ;
  2313. ; pascal ComponentResult TuneInstant(TunePlayer tp, void *tune, long tunePosition)
  2314. ;
  2315.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2316.         Macro
  2317.         _TuneInstant
  2318.             move.l              #$0008000B,-(sp)
  2319.             moveq               #0,D0
  2320.             dc.w                $A82A
  2321.         EndM
  2322.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2323.         IMPORT_CFM_FUNCTION TuneInstant
  2324.     ENDIF
  2325.  
  2326. ;
  2327. ; pascal ComponentResult TuneGetStatus(TunePlayer tp, TuneStatus *status)
  2328. ;
  2329.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2330.         Macro
  2331.         _TuneGetStatus
  2332.             move.l              #$0004000C,-(sp)
  2333.             moveq               #0,D0
  2334.             dc.w                $A82A
  2335.         EndM
  2336.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2337.         IMPORT_CFM_FUNCTION TuneGetStatus
  2338.     ENDIF
  2339.  
  2340. ;  Values for stopping. 
  2341.  
  2342. kTuneStopFade                    EQU        1                    ; do a quick, synchronous fadeout 
  2343. kTuneStopSustain                EQU        2                    ; don't silece notes 
  2344. kTuneStopInstant                EQU        4                    ; silence notes fast (else, decay them) 
  2345. kTuneStopReleaseChannels        EQU        8                    ; afterwards, let the channels go 
  2346. ;
  2347. ; pascal ComponentResult TuneStop(TunePlayer tp, long stopFlags)
  2348. ;
  2349.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2350.         Macro
  2351.         _TuneStop
  2352.             move.l              #$0004000D,-(sp)
  2353.             moveq               #0,D0
  2354.             dc.w                $A82A
  2355.         EndM
  2356.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2357.         IMPORT_CFM_FUNCTION TuneStop
  2358.     ENDIF
  2359.  
  2360.  
  2361. ;
  2362. ; pascal ComponentResult TuneSetVolume(TunePlayer tp, Fixed volume)
  2363. ;
  2364.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2365.         Macro
  2366.         _TuneSetVolume
  2367.             move.l              #$00040010,-(sp)
  2368.             moveq               #0,D0
  2369.             dc.w                $A82A
  2370.         EndM
  2371.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2372.         IMPORT_CFM_FUNCTION TuneSetVolume
  2373.     ENDIF
  2374.  
  2375. ;
  2376. ; pascal ComponentResult TuneGetVolume(TunePlayer tp)
  2377. ;
  2378.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2379.         Macro
  2380.         _TuneGetVolume
  2381.             move.l              #$00000011,-(sp)
  2382.             moveq               #0,D0
  2383.             dc.w                $A82A
  2384.         EndM
  2385.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2386.         IMPORT_CFM_FUNCTION TuneGetVolume
  2387.     ENDIF
  2388.  
  2389. ;
  2390. ; pascal ComponentResult TunePreroll(TunePlayer tp)
  2391. ;
  2392.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2393.         Macro
  2394.         _TunePreroll
  2395.             move.l              #$00000012,-(sp)
  2396.             moveq               #0,D0
  2397.             dc.w                $A82A
  2398.         EndM
  2399.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2400.         IMPORT_CFM_FUNCTION TunePreroll
  2401.     ENDIF
  2402.  
  2403. ;
  2404. ; pascal ComponentResult TuneUnroll(TunePlayer tp)
  2405. ;
  2406.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2407.         Macro
  2408.         _TuneUnroll
  2409.             move.l              #$00000013,-(sp)
  2410.             moveq               #0,D0
  2411.             dc.w                $A82A
  2412.         EndM
  2413.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2414.         IMPORT_CFM_FUNCTION TuneUnroll
  2415.     ENDIF
  2416.  
  2417. ;
  2418. ; pascal ComponentResult TuneSetNoteChannels(TunePlayer tp, unsigned long count, NoteChannel *noteChannelList, TunePlayCallBackUPP playCallBackProc, long refCon)
  2419. ;
  2420.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2421.         Macro
  2422.         _TuneSetNoteChannels
  2423.             move.l              #$00100014,-(sp)
  2424.             moveq               #0,D0
  2425.             dc.w                $A82A
  2426.         EndM
  2427.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2428.         IMPORT_CFM_FUNCTION TuneSetNoteChannels
  2429.     ENDIF
  2430.  
  2431. ;
  2432. ; pascal ComponentResult TuneSetPartTranspose(TunePlayer tp, unsigned long part, long transpose, long velocityShift)
  2433. ;
  2434.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2435.         Macro
  2436.         _TuneSetPartTranspose
  2437.             move.l              #$000C0015,-(sp)
  2438.             moveq               #0,D0
  2439.             dc.w                $A82A
  2440.         EndM
  2441.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2442.         IMPORT_CFM_FUNCTION TuneSetPartTranspose
  2443.     ENDIF
  2444.  
  2445.  
  2446. ;
  2447. ; pascal NoteAllocator TuneGetNoteAllocator(TunePlayer tp)
  2448. ;
  2449.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2450.         Macro
  2451.         _TuneGetNoteAllocator
  2452.             move.l              #$00000017,-(sp)
  2453.             moveq               #0,D0
  2454.             dc.w                $A82A
  2455.         EndM
  2456.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2457.         IMPORT_CFM_FUNCTION TuneGetNoteAllocator
  2458.     ENDIF
  2459.  
  2460. ;
  2461. ; pascal ComponentResult TuneSetSofter(TunePlayer tp, long softer)
  2462. ;
  2463.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2464.         Macro
  2465.         _TuneSetSofter
  2466.             move.l              #$00040018,-(sp)
  2467.             moveq               #0,D0
  2468.             dc.w                $A82A
  2469.         EndM
  2470.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2471.         IMPORT_CFM_FUNCTION TuneSetSofter
  2472.     ENDIF
  2473.  
  2474. ;
  2475. ; pascal ComponentResult TuneTask(TunePlayer tp)
  2476. ;
  2477.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2478.         Macro
  2479.         _TuneTask
  2480.             move.l              #$00000019,-(sp)
  2481.             moveq               #0,D0
  2482.             dc.w                $A82A
  2483.         EndM
  2484.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2485.         IMPORT_CFM_FUNCTION TuneTask
  2486.     ENDIF
  2487.  
  2488. ;
  2489. ; pascal ComponentResult TuneSetBalance(TunePlayer tp, long balance)
  2490. ;
  2491.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2492.         Macro
  2493.         _TuneSetBalance
  2494.             move.l              #$0004001A,-(sp)
  2495.             moveq               #0,D0
  2496.             dc.w                $A82A
  2497.         EndM
  2498.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2499.         IMPORT_CFM_FUNCTION TuneSetBalance
  2500.     ENDIF
  2501.  
  2502. ;
  2503. ; pascal ComponentResult TuneSetSoundLocalization(TunePlayer tp, Handle data)
  2504. ;
  2505.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2506.         Macro
  2507.         _TuneSetSoundLocalization
  2508.             move.l              #$0004001B,-(sp)
  2509.             moveq               #0,D0
  2510.             dc.w                $A82A
  2511.         EndM
  2512.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2513.         IMPORT_CFM_FUNCTION TuneSetSoundLocalization
  2514.     ENDIF
  2515.  
  2516. ;
  2517. ; pascal ComponentResult TuneSetHeaderWithSize(TunePlayer tp, unsigned long *header, unsigned long size)
  2518. ;
  2519.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2520.         Macro
  2521.         _TuneSetHeaderWithSize
  2522.             move.l              #$0008001C,-(sp)
  2523.             moveq               #0,D0
  2524.             dc.w                $A82A
  2525.         EndM
  2526.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2527.         IMPORT_CFM_FUNCTION TuneSetHeaderWithSize
  2528.     ENDIF
  2529.  
  2530.  
  2531. ;  flags for part mix. 
  2532.  
  2533. kTuneMixMute                    EQU        1                    ; disable a part 
  2534. kTuneMixSolo                    EQU        2                    ; if any parts soloed, play only soloed parts 
  2535.  
  2536. ;
  2537. ; pascal ComponentResult TuneSetPartMix(TunePlayer tp, unsigned long partNumber, long volume, long balance, long mixFlags)
  2538. ;
  2539.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2540.         Macro
  2541.         _TuneSetPartMix
  2542.             move.l              #$0010001D,-(sp)
  2543.             moveq               #0,D0
  2544.             dc.w                $A82A
  2545.         EndM
  2546.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2547.         IMPORT_CFM_FUNCTION TuneSetPartMix
  2548.     ENDIF
  2549.  
  2550. ;
  2551. ; pascal ComponentResult TuneGetPartMix(TunePlayer tp, unsigned long partNumber, long *volumeOut, long *balanceOut, long *mixFlagsOut)
  2552. ;
  2553.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2554.         Macro
  2555.         _TuneGetPartMix
  2556.             move.l              #$0010001E,-(sp)
  2557.             moveq               #0,D0
  2558.             dc.w                $A82A
  2559.         EndM
  2560.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2561.         IMPORT_CFM_FUNCTION TuneGetPartMix
  2562.     ENDIF
  2563.  
  2564.  
  2565. ; typedef unsigned long                 MusicOpWord
  2566.  
  2567. ; typedef unsigned long *                MusicOpWordPtr
  2568.  
  2569. ;      QuickTime Music Track Event Formats:
  2570. ;
  2571. ;    At this time, QuickTime music tracks support 5 different event types -- REST events,
  2572. ;    short NOTE events, short CONTROL events, short GENERAL events, Long NOTE events, 
  2573. ;    long CONTROL events, and variable GENERAL events.
  2574. ;        • REST Event (4 bytes/event):
  2575. ;    
  2576. ;            (0 0 0) (5-bit UNUSED) (24-bit Rest Duration)
  2577. ;        
  2578. ;        • Short NOTE Events (4 bytes/event):
  2579. ;    
  2580. ;            (0 0 1) (5-bit Part) (6-bit Pitch) (7-bit Volume) (11-bit Duration)
  2581. ;        
  2582. ;            where:    Pitch is offset by 32 (Actual pitch = pitch field + 32)
  2583. ;
  2584. ;        • Short CONTROL Events (4 bytes/event):
  2585. ;    
  2586. ;            (0 1 0) (5-bit Part) (8-bit Controller) (1-bit UNUSED) (1-bit Sign) (7-bit MSB) (7-bit LSB)
  2587. ;                                                                         ( or 15-bit Signed Value)
  2588. ;        • Short GENERAL Event (4 bytes/event):
  2589. ;    
  2590. ;            (0 1 1) (1-bit UNUSED) (12-bit Sub-Type) (16-bit Value)
  2591. ;    
  2592. ;        • Long NOTE Events (8 bytes/event):
  2593. ;    
  2594. ;            (1 0 0 1) (12-bit Part) (1-bit UNUSED) (7-bit Pitch) (1-bit UNUSED) (7-bit Volume)
  2595. ;            (1 0) (8-bit UNUSED) (22-bit Duration)
  2596. ;        
  2597. ;        • Long CONTROL Event (8 bytes/event):
  2598. ;        
  2599. ;            (1 0 1 0) (12-bit Part) (16-bit Value MSB) 
  2600. ;            (1 0) (14-bit Controller) (16-bit Value LSB)
  2601. ;    
  2602. ;        • Long KNOB Event (8 bytes/event):
  2603. ;    
  2604. ;            (1 0 1 1) (12-bit Sub-Type) (16-bit Value MSB)
  2605. ;            (1 0) (14-bit KNOB) (16-bit Value LSB)
  2606. ;    
  2607. ;        • Variable GENERAL Length Events (N bytes/event):
  2608. ;    
  2609. ;            (1 1 1 1) (12-bit Sub-Type) (16-bit Length)
  2610. ;                :
  2611. ;            (32-bit Data values)
  2612. ;                :
  2613. ;            (1 1) (14-bit UNUSED) (16-bit Length)
  2614. ;    
  2615. ;            where:    Length field is the number of LONG words in the record.
  2616. ;                    Lengths include the first and last long words (Minimum length = 2)
  2617. ;                
  2618. ;    The following event type values have not been used yet and are reserved for 
  2619. ;    future expansion:
  2620. ;        
  2621. ;        • (1 0 0 0)        (8 bytes/event)
  2622. ;        • (1 1 0 0)        (N bytes/event)
  2623. ;        • (1 1 0 1)        (N bytes/event)
  2624. ;        • (1 1 1 0)        (N bytes/event)
  2625. ;        
  2626. ;    For all events, the following generalizations apply:
  2627. ;    
  2628. ;        -    All duration values are specified in Millisecond units.
  2629. ;        -     Pitch values are intended to map directly to the MIDI key numbers.
  2630. ;        -    Controllers from 0 to 127 correspond to the standard MIDI controllers.
  2631. ;            Controllers greater than 127 correspond to other controls (i.e., Pitch Bend, 
  2632. ;            Key Pressure, and Channel Pressure).    
  2633. ;
  2634.  
  2635.  
  2636. ;  Defines for the implemented music event data fields
  2637.  
  2638. kRestEventType                    EQU        $00000000            ; lower 3-bits 
  2639. kNoteEventType                    EQU        $00000001            ; lower 3-bits 
  2640. kControlEventType                EQU        $00000002            ; lower 3-bits 
  2641. kMarkerEventType                EQU        $00000003            ; lower 3-bits 
  2642. kUndefined1EventType            EQU        $00000008            ; 4-bits 
  2643. kXNoteEventType                    EQU        $00000009            ; 4-bits 
  2644. kXControlEventType                EQU        $0000000A            ; 4-bits 
  2645. kKnobEventType                    EQU        $0000000B            ; 4-bits 
  2646. kUndefined2EventType            EQU        $0000000C            ; 4-bits 
  2647. kUndefined3EventType            EQU        $0000000D            ; 4-bits 
  2648. kUndefined4EventType            EQU        $0000000E            ; 4-bits 
  2649. kGeneralEventType                EQU        $0000000F            ; 4-bits 
  2650. kXEventLengthBits                EQU        $00000002            ; 2 bits: indicates 8-byte event record 
  2651. kGeneralEventLengthBits            EQU        $00000003            ; 2 bits: indicates variable length event record 
  2652. kEventLen                        EQU        1                    ; length of events in long words 
  2653. kXEventLen                        EQU        2
  2654. kRestEventLen                    EQU        1                    ; length of events in long words 
  2655. kNoteEventLen                    EQU        1
  2656. kControlEventLen                EQU        1
  2657. kMarkerEventLen                    EQU        1
  2658. kXNoteEventLen                    EQU        2
  2659. kXControlEventLen                EQU        2
  2660. kGeneralEventLen                EQU        2                    ; 2 or more, however 
  2661.                                                             ; Universal Event Defines
  2662. kEventLengthFieldPos            EQU        30                    ; by looking at these two bits of the 1st or last word              
  2663. kEventLengthFieldWidth            EQU        2                    ; of an event you can determine the event length                      
  2664.                                                             ; length field: 0 & 1 => 1 long; 2 => 2 longs; 3 => variable length 
  2665. kEventTypeFieldPos                EQU        29                    ; event type field for short events 
  2666. kEventTypeFieldWidth            EQU        3                    ; short type is 3 bits 
  2667. kXEventTypeFieldPos                EQU        28                    ; event type field for extended events 
  2668. kXEventTypeFieldWidth            EQU        4                    ; extended type is 4 bits 
  2669. kEventPartFieldPos                EQU        24
  2670. kEventPartFieldWidth            EQU        5
  2671. kXEventPartFieldPos                EQU        16                    ; in the 1st long word 
  2672. kXEventPartFieldWidth            EQU        12                    ; Rest Events
  2673. kRestEventDurationFieldPos        EQU        0
  2674. kRestEventDurationFieldWidth    EQU        24
  2675. kRestEventDurationMax            EQU        $00FFFFFF            ; Note Events
  2676. kNoteEventPitchFieldPos            EQU        18
  2677. kNoteEventPitchFieldWidth        EQU        6
  2678. kNoteEventPitchOffset            EQU        32                    ; add to value in pitch field to get actual pitch 
  2679. kNoteEventVolumeFieldPos        EQU        11
  2680. kNoteEventVolumeFieldWidth        EQU        7
  2681. kNoteEventVolumeOffset            EQU        0                    ; add to value in volume field to get actual volume 
  2682. kNoteEventDurationFieldPos        EQU        0
  2683. kNoteEventDurationFieldWidth    EQU        11
  2684. kNoteEventDurationMax            EQU        $000007FF
  2685. kXNoteEventPitchFieldPos        EQU        0                    ; in the 1st long word 
  2686. kXNoteEventPitchFieldWidth        EQU        16
  2687. kXNoteEventDurationFieldPos        EQU        0                    ; in the 2nd long word 
  2688. kXNoteEventDurationFieldWidth    EQU        22
  2689. kXNoteEventDurationMax            EQU        $003FFFFF
  2690. kXNoteEventVolumeFieldPos        EQU        22                    ; in the 2nd long word 
  2691. kXNoteEventVolumeFieldWidth        EQU        7                    ; Control Events
  2692. kControlEventControllerFieldPos    EQU        16
  2693. kControlEventControllerFieldWidth EQU    8
  2694. kControlEventValueFieldPos        EQU        0
  2695. kControlEventValueFieldWidth    EQU        16
  2696. kXControlEventControllerFieldPos EQU    0                    ; in the 2nd long word 
  2697. kXControlEventControllerFieldWidth EQU    16
  2698. kXControlEventValueFieldPos        EQU        0                    ; in the 1st long word 
  2699. kXControlEventValueFieldWidth    EQU        16                    ; Knob Events
  2700. kKnobEventValueHighFieldPos        EQU        0                    ; 1st long word 
  2701. kKnobEventValueHighFieldWidth    EQU        16
  2702. kKnobEventKnobFieldPos            EQU        16                    ; 2nd long word 
  2703. kKnobEventKnobFieldWidth        EQU        14
  2704. kKnobEventValueLowFieldPos        EQU        0                    ; 2nd long word 
  2705. kKnobEventValueLowFieldWidth    EQU        16                    ; Marker Events
  2706. kMarkerEventSubtypeFieldPos        EQU        16
  2707. kMarkerEventSubtypeFieldWidth    EQU        8
  2708. kMarkerEventValueFieldPos        EQU        0
  2709. kMarkerEventValueFieldWidth        EQU        16                    ; General Events
  2710. kGeneralEventSubtypeFieldPos    EQU        16                    ; in the last long word 
  2711. kGeneralEventSubtypeFieldWidth    EQU        14
  2712. kGeneralEventLengthFieldPos        EQU        0                    ; in the 1st & last long words 
  2713. kGeneralEventLengthFieldWidth    EQU        16
  2714.     IF TARGET_RT_LITTLE_ENDIAN THEN
  2715.  
  2716. kEndMarkerValue                    EQU        $00000060
  2717.     ELSE
  2718.  
  2719. kEndMarkerValue                    EQU        $60000000
  2720.     ENDIF    ; TARGET_RT_LITTLE_ENDIAN
  2721. ;  General Event Defined Types
  2722.  
  2723. kGeneralEventNoteRequest        EQU        1                    ; Encapsulates NoteRequest data structure 
  2724. kGeneralEventPartKey            EQU        4
  2725. kGeneralEventTuneDifference        EQU        5                    ; Contains a standard sequence, with end marker, for the tune difference of a sequence piece (halts QuickTime 2.0 Music) 
  2726. kGeneralEventAtomicInstrument    EQU        6                    ; Encapsulates AtomicInstrument record 
  2727. kGeneralEventKnob                EQU        7                    ; knobID/knobValue pairs; smallest event is 4 longs 
  2728. kGeneralEventMIDIChannel        EQU        8                    ; used in tune header, one longword identifies the midi channel it originally came from 
  2729. kGeneralEventPartChange            EQU        9                    ; used in tune sequence, one longword identifies the tune part which can now take over this part's note channel (similar to program change) (halts QuickTime 2.0 Music)
  2730. kGeneralEventNoOp                EQU        10                    ; guaranteed to do nothing and be ignored. (halts QuickTime 2.0 Music) 
  2731. kGeneralEventUsedNotes            EQU        11                    ; four longwords specifying which midi notes are actually used, 0..127 msb to lsb 
  2732. kGeneralEventPartMix            EQU        12                    ; three longwords: Fixed volume, long balance, long flags 
  2733. ;  Marker Event Defined Types        // marker is 60 ee vv vv in hex, where e = event type, and v = value
  2734.  
  2735. kMarkerEventEnd                    EQU        0                    ; marker type 0 means: value 0 - stop, value != 0 - ignore
  2736. kMarkerEventBeat                EQU        1                    ; value 0 = single beat; anything else is 65536ths-of-a-beat (quarter note)
  2737. kMarkerEventTempo                EQU        2                    ; value same as beat marker, but indicates that a tempo event should be computed (based on where the next beat or tempo marker is) and emitted upon export
  2738.  
  2739. kCurrentlyNativeEndian            EQU        1
  2740. kCurrentlyNotNativeEndian        EQU        2
  2741. ;  UPP call backs 
  2742.  
  2743.     ENDIF ; __QUICKTIMEMUSIC__ 
  2744.  
  2745.